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

Python 从列表中的元组压缩字符串子集,python,string,zip,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.ex

有这样的结构

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')]
有没有关于如何继续的建议?此外,我相信应该有一个更优雅的方式来做到这一点,但很难传递给谷歌一个准确的定义的问题; 谢谢

这也应继续适用于n长管道分隔字符的n长组和n长组,尽管它会将重新组合的值截断为每组字符组中最短的字符组


这也应该继续适用于n长管道分隔字符的n长组和n长组,尽管它会将重新组合的值截断为每组字符组中最短的字符组。

您的代码基本上可以工作,但这里有一种更优雅的方法

首先定义一个换位函数,该函数接受一个HAPT条目并将其翻转:

>>> transpose = lambda tup: zip(*(y.split("|") for y in tup))
然后将该函数映射到HAPT上:

然后如果你想把它平铺成一个列表

>>> y = list(chain.from_iterable(map(transpose, hapts)))
... [('1', '1'), ('2', '2'), ('3', '3'), ('4', '4')]
最后,要将其重新连接到字符串中,请执行以下操作:

>>> map("|".join, y)
... ['1|1', '2|2', '3|3', '4|4']

您的代码基本上可以工作,但这里有一种更优雅的方法

首先定义一个换位函数,该函数接受一个HAPT条目并将其翻转:

>>> transpose = lambda tup: zip(*(y.split("|") for y in tup))
然后将该函数映射到HAPT上:

然后如果你想把它平铺成一个列表

>>> y = list(chain.from_iterable(map(transpose, hapts)))
... [('1', '1'), ('2', '2'), ('3', '3'), ('4', '4')]
最后,要将其重新连接到字符串中,请执行以下操作:

>>> map("|".join, y)
... ['1|1', '2|2', '3|3', '4|4']

你已经非常接近解决这个问题了,我认为最好的解决方案是一个简单的:

这还有一个好处,就是可以很好地处理可能更多的值,而无需修改

如果您想要的元组不是您请求的输出所显示的元组,因为括号不构成元组,逗号构成元组,那么在以下内容中添加元组就很简单:

[("|".join(values), ) for values in 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']

你已经非常接近解决这个问题了,我认为最好的解决方案是一个简单的:

这还有一个好处,就是可以很好地处理可能更多的值,而无需修改

如果您想要的元组不是您请求的输出所显示的元组,因为括号不构成元组,逗号构成元组,那么在以下内容中添加元组就很简单:

[("|".join(values), ) for values in 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']

这方面的问题是

展开列表 重新格式化 折叠它 下面是你如何解决这个问题的方法

>>> reformat = lambda t: map('|'.join,  izip(*(e.split("|") for e in  t)))
>>> list(chain(*(reformat(t) for t in hapts)))
['1|1', '2|2', '3|3', '4|4']
在此上下文中,您不需要工作代码

相反,如果您需要处理输出,只需重新扫描它并将其与|

>>> ['{}|{}'.format(*t) for t in zipped]
['1|1', '2|2', '3|3', '4|4']


括号在输出中是多余的

本上下文中的问题是

展开列表 重新格式化 折叠它 下面是你如何解决这个问题的方法

>>> reformat = lambda t: map('|'.join,  izip(*(e.split("|") for e in  t)))
>>> list(chain(*(reformat(t) for t in hapts)))
['1|1', '2|2', '3|3', '4|4']
在此上下文中,您不需要工作代码

相反,如果您需要处理输出,只需重新扫描它并将其与|

>>> ['{}|{}'.format(*t) for t in zipped]
['1|1', '2|2', '3|3', '4|4']



括号在输出中是多余的

您尝试过这个吗?明确地说:你还远没有找到问题的答案。@MartijnPieters,Oops,没有注意到最后值的顺序。原谅我,现在还早…你试过这个吗?明确地说:你还远没有找到问题的答案。@MartijnPieters,Oops,没有注意到最后值的顺序。原谅我,时间还早…@Marcin Oops,我忘了最后一行。谢谢。@marcinoops,我忘了最后一行。谢谢。你确定你要求的输出是你想要的吗?例如,括号在你写的东西中没有意义。是的,对不起!括号来自以前的尝试!我会编辑。谢谢来自5位代表人数超过6k的用户的5个答案,只有1人拥有非负面投票0。。。这里有些有趣的事情。现在我们正朝着正确的方向前进。您确定您请求的输出是您想要的吗?例如,括号在你写的东西中没有意义。是的,对不起!括号来自以前的尝试!我会编辑。谢谢来自5位代表人数超过6k的用户的5个答案,只有1人拥有非负面投票0。。。这里似乎有点可笑。现在我们正朝着正确的方向前进。@peix输出是否符合您的要求?请看我评论中的链接,什么不起作用?@Marcin我直接将我的脚本结果与他提供的要求输出进行比较,它们比较相等。@Lattyware否。元组在哪里?@Marcin请求的输出中没有元组。@peixe不必担心-小心使用括号,正如这个问题所示,它们可能会导致混淆。@peixe输出与您请求的匹配请参阅我的评论中的链接,什么不起作用?@Marcin我直接将我的脚本结果与他给出的请求输出进行比较,结果是相等的。@Lattyware否。元组在哪里?@Marcin
re在请求的输出中没有元组。@peixe不用担心-小心使用括号,正如这个问题所示,它们可能会导致混淆。