像这样的结构
hapts = [('1|2', '1|2'), ('3|4', '3|4')]
我需要压缩
它(有点……)以获得以下内容:
end = ['1|1', '2|2', '3|3', '4|4']
我开始使用以下代码:
zipped=[]
for i in hapts:
tete = zip(i[0][0], i[1][0])
zipped.extend(tete)
some = zip(i[0][2], i[1][2])
zipped.extend(some)
...然后像这样压缩它:
zipped = [('1', '1'), ('2', '2'), ('3', '3'), ('4', '4')]
关于如何继续的任何建议?此外,我确信应该有一种更优雅的方式来做到这一点,但很难将问题的准确定义传递给谷歌;) 谢谢!
最佳答案
你非常接近解决这个问题,我认为这里最好的解决方案是一个简单的 str.join()
在list comprehension :
["|".join(values) for values in zipped]
这还有一个好处,可以很好地处理(可能)更多的值,而无需修改。
如果您想要元组(这不是您请求的输出显示的内容,因为方括号不能构成元组,逗号可以),那么将其添加到:
[("|".join(values), ) for values in zipped]
另请注意,zipped
也可以更有效地生成:
>>> zipped = itertools.chain.from_iterable(zip(*[part.split("|") for part in group]) for group in hapts)
>>> ["|".join(values) for values in zipped]
['1|1', '2|2', '3|3', '4|4']
并展示我之前关于优雅地处理更多值的意思:
>>> hapts = [('1|2|3', '1|2|3', '1|2|3'), ('3|4|5', '3|4|5', '3|4|5')]
>>> zipped = itertools.chain.from_iterable(zip(*[part.split("|") for part in group]) for group in hapts)
>>> ["|".join(values) for values in zipped]
['1|1|1', '2|2|2', '3|3|3', '3|3|3', '4|4|4', '5|5|5']
关于python - 从列表中的元组压缩字符串子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14401291/