【问题标题】:Is there a better way to join elements from three lists than a triple nested for loop?有没有比三重嵌套 for 循环更好的方法来连接三个列表中的元素?
【发布时间】:2021-11-21 19:08:01
【问题描述】:

我有三个这样的列表:

l1 = ['a', 'b', 'c']
l2 = ['d', 'e', 'f']
l3 = ['h', 'i', 'j']

现在,我要做的是将位于同一位置的所有元素组合在一行上,如下所示:

line_1: 'adh'
line_2: 'bei'
line_3: 'cfj'

有没有比三重嵌套 for 循环更好的方法?

for i in range(len(l1)):
    for j in range(len(l2)):
        for k in range(len(l3)):
            if i == j and j == k:
                print(l1[i] + l2[j] + l3[k])

基本上,我试图让某些东西运行得比 O(n^3) 快,因为我有大约 100,000 个项目我想这样做。

不确定 CSV 模块是否有办法做到这一点,但在合并后每一行都将被写入 csv 文件。到目前为止,我还没有找到我正在寻找的东西,并且发现社区中的某个人可能知道如何更好地解决这个问题。

哇,感谢所有查看此内容的人!有几个答案,他们都工作。我将为首先发布的人标记已回答的问题。再次感谢所有观看的人!我什至不知道 zip 功能。

【问题讨论】:

  • 我不明白你为什么要写那些内部循环。
  • 看看内置的“zip”功能。
  • 也许你应该让 Pandas 来处理你的 csv 文件。如果一切正常,您可以投票赞成所有答案:)

标签: python list csv


【解决方案1】:

join() 字符串方法通过连接一个可迭代对象的所有元素返回一个字符串。很容易从下面的代码中得到你的输出,

l1 = ['a', 'b', 'c']
l2 = ['d', 'e', 'f']
l3 = ['h', 'i', 'j']

line1="".join(l1)
line2="".join(l2)
line3="".join(l3)

print(f"line1-{line1}")
print(f"line2-{line2}")
print(f"line3-{line3}")

【讨论】:

    【解决方案2】:

    在一行中,由@juanpa.arrivillaga 简化:

    >>> list(map(''.join, zip(l1, l2, l3)))
    ['adh', 'bei', 'cfj']
    

    或者,@2e0byo 的建议:

    >>> ["".join(x) for x in zip(l1, l2, l3)]
    ['adh', 'bei', 'cfj']
    

    【讨论】:

    • 甚至:["".join(x) for x in zip(l1, l2, l3)]
    • 别误会,让 Guido 蠕动是函数式编程乐趣的一部分;)
    【解决方案3】:

    您只能使用一个循环,假设所有列表的长度相同:

    for i in range(len(l1)):
        print(l1[i]+l2[i]+l3[i])
    

    【讨论】:

      【解决方案4】:

      这个怎么样?

      l1 = ['a', 'b', 'c']
      l2 = ['d', 'e', 'f']
      l3 = ['h', 'i', 'j']
      for a,b,c in zip(l1, l2, l3):
         print(a, b, c)
      

      但如果你削减冗余递归,即使你使用的模式也能正常工作:

      for i in range(len(l1)):
         print(l1[i], l2[i], l3[i])
      

      编辑:如另一个答案中所述,之后您必须再次加入它们;)

      【讨论】:

        【解决方案5】:

        你可能想要这样的东西:

        l1 = ['a', 'b', 'c']
        l2 = ['d', 'e', 'f']
        l3 = ['h', 'i', 'j']
        
        for line in (''.join(t) for t in zip(l1, l2, l3)):
            print(line)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-10
          • 2020-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-04
          • 2016-06-01
          相关资源
          最近更新 更多