Python 3中的列表组合挑战

Python 3中的列表组合挑战,python,arrays,python-3.x,list,combinations,Python,Arrays,Python 3.x,List,Combinations,我只是面临一个棘手的挑战,在Python3中创建一个列表组合 我有一个列表需要用于组合。(给定列表) 我想把列表和下面的每个值结合起来。(结果清单) 结果列表中的第一项由给定列表中每个项的前4个字符串和后4个字符串依次组合而成。 因此,0000是每个项目的前4个字符串,1111是给定列表中每个项目的后4个字符串。 因此,结果列表的第一项是00001111 Python 3编写的优化代码是什么? 提前谢谢你 这是解决方案 givenList = ['01101001', '01110110', '

我只是面临一个棘手的挑战,在Python3中创建一个列表组合

我有一个列表需要用于组合。(给定列表)

我想把列表和下面的每个值结合起来。(结果清单)

结果列表中的第一项由给定列表中每个项的前4个字符串和后4个字符串依次组合而成。 因此,
0000
是每个项目的前4个字符串,
1111
是给定列表中每个项目的后4个字符串。 因此,结果列表的第一项是
00001111

Python 3编写的优化代码是什么? 提前谢谢你

这是解决方案

givenList = ['01101001', '01110110', '01100101', '01101011']
unitList = list()
result = list()

for i in range(8):
  for j in givenList:
    unitList.append(j[i])
  if i % 2 == 1:
    result.append(''.join(unitList))
    unitList = []

print(result)
这将仅适用于包含静态8位数字的给定列表。
您可以使用
len(givenList[0])
更新
8
,惯用的Python代码大量使用迭代器。您试图做的是对字符串进行一种形式的并行迭代,
zip
可以做到这一点

如果
strings=['01101001','0110110110','011001100101','011011011']

然后
[''.join(chars)for chars in zip(*strings)]
的计算结果为

['0000', '1111', '1111', '0100', '1001', '0110', '0101', '1011']
这几乎就是你想要的。如果您可以成对地迭代列表,那就太好了。您可以通过多种方式来实现,包括使用nice解决方案,因为@mic_e:

#the following pairwise iterator is due to mic_e
#from https://stackoverflow.com/a/30426000/4996248

def pairwise(it):
    it = iter(it)
    while True:
        try:
            yield next(it), next(it)
        except StopIteration:
            # no more elements in the iterator
            return
然后简单地说:

new_strings = [a+b for a,b in pairwise(''.join(chars) for chars in zip(*strings))]
这是一个简单的解决方案

lt = ['01101001', '01110110', '01100101', '01101011']

def list_combination(lt,new=[],num=""):
  for i in range(len(lt[0])):
    if len(num)==8:
      num = ""
    for j in lt:
      num += j[i]
    if len(num)==len(lt[0]):
      new.append(num)
  return new
print(list_combination(lt))
#['00001111', '11110100', '10010110', '01011011']

除了似乎试图将堆栈溢出用作代码编写服务之外,您的问题还不清楚。我看不出你的第二个列表是如何从第一个列表中派生出来的。您说了一些关于组合前4个字符串和后4个字符串的内容,但是您的列表只有4个字符串,所以“后4个字符串”没有明显的含义。您似乎在谈论字符串中的字符,而不是字符串本身,但是
'0000'
'1111
从何而来?它们似乎与您的输入列表无关。即使我愿意,我也无法为您提供免费代码,因为问题太不清楚了。我的意思是每个项目的第二个字符串,列表有4个项目,这样我可以从每个项目中获得4个字符串。我解释得非常详细,第一个项目的第一个字符串是0,第二个项目的第一个字符串是0,给定列表中第三项的第一个字符串为0,第四项的第一个字符串为0。因此,如果将它们组合在一起,则它是
0000
,并且第一个项目的第二个字符串是1,第二个项目的第二个字符串是1,第三个项目的第二个字符串是1,第四个项目的第二个字符串是给定列表中的1。因此,如果将它们结合在一起,那就是
1111
我真的是python的新手。现在开始学习。我不知道@komatiraju为什么会这样说。堆栈溢出是为了帮助程序员解决他们的问题而设计的。您的问题是“Python3编写的优化代码是什么?”——似乎您希望有人为您解决问题,而不是在解决问题时获得帮助。描述你解决问题的尝试会消除这种印象。如果您讨论的是字符串中的字符而不是字符串中的字符串,您的问题会更清楚。在这种情况下,有一种更简单的方法:
t=list(zip(*k))
将字符按元组顺序排列,然后
s=[''.join(a+b)表示a,b表示zip(t[::2],t[1::2])]
将它们连接在一起。
new_strings = [a+b for a,b in pairwise(''.join(chars) for chars in zip(*strings))]
lt = ['01101001', '01110110', '01100101', '01101011']

def list_combination(lt,new=[],num=""):
  for i in range(len(lt[0])):
    if len(num)==8:
      num = ""
    for j in lt:
      num += j[i]
    if len(num)==len(lt[0]):
      new.append(num)
  return new
print(list_combination(lt))
#['00001111', '11110100', '10010110', '01011011']