给出这个列表:
['IND', 'MIA', '06:37 AM', '103', 'LA', 'SUN', '06:49 AM', '-150', '120']
我想对列表进行分组(创建元组)以获得以下最终结果:
[('IND', 'MIA', '06:37 AM', '103'), ('LA', 'SUN', '06:49 AM', '-150', '120')]
表示组是一个以单词开头的值列表(实际上总是有 2 个连续的单词),此处:IND
后跟一些其他值,直至另一个单词,此处:洛杉矶
。所有单词对可能都是相同的,例如这将是有效列表:
['IND', 'MIA', '06:37 AM', '103', 'IND', 'MIA', '06:49 AM', '-150', '120']
它还需要分组。您能提供一些巧妙的解决方案吗?
最佳答案
采取假设:
- 单词仅是字母字符串
- 一个 block 以 k 个单词开始,k>=1(显然是两个)
- 列表元素的数据部分没有单词
一种方法是按单词和数据进行分组,然后构建列表理解来连接对:
import itertools as it
data = ['IND', 'MIA', '06:37 AM', '103', 'LA', 'SUN', '06:49 AM', '-150', '120']
g = it.groupby(data, str.isalpha)
[tuple(v)+tuple(next(g)[1]) for _, v in g]
关于python - 对列表内的值进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16860832/