列出 Python 3 中的组合挑战



我只是面临着一个棘手的挑战,即在python 3中制作列表组合。

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

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

我想将列表与每个值组合在一起,如下所示。(结果列表(

['00001111', '11110100', '10010110', '01011011']

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

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

惯用的 Python 代码大量使用迭代器。您正在尝试做的是对字符串进行并行迭代的一种形式,这就是zip可以做的。

如果strings = ['01101001', '01110110', '01100101', '01101011']

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

['0000', '1111', '1111', '0100', '1001', '0110', '0101', '1011']

这几乎是你想要的。如果您可以成对迭代列表,那就太好了。您可以通过多种方式执行此操作,包括由于@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))]

这是['00001111', '11110100', '10010110', '01011011'].

这是解决方案。

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

简单的解决方案

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']

最新更新