python - 从列表中的元组压缩字符串子集

标签 python string zip

像这样的结构

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/

相关文章:

android - as3 从应用程序获取手机上的 zip 文件 - 文件路径然后解压缩

go - 从网上获取 zip 文件并在 Go 中解压

c# - 谁可以在 C# 中为 dankogai 的 javascript deflate 实现 inflate?

python - 用 0 替换空的 numpy 字符串

python3如何在应用error_callback时找出apply_async目标函数中的哪一行导致错误

python - Django 模板 - 遍历范围

java - 获取字符串数组中每个单词的第一个字符及其频率

Python 的 argv 和 bash?

PHP 字符串连接 - "$a $b"与 $a 。 ""。 $b - 性能

javascript - 替换方法不起作用