转换元组列表的最python方法



我需要转换样式中的元组列表:

[(day1, name1, value1), (day2, name2, value2), (day3, name3, value3)]... etc

到:

[day1, day2, day3], [name1, name2, name3], [value1, value2, value3]... etc

目前我是这样做的:

vals is the list of tuples
day = []
name = []
value = []
for val in vals:
    day.append(val[0])
    name.append(val[1])
    value.append(val[2])

它有效,但它看起来很丑...我想知道是否有一种更"pythonic"的方式来达到相同的结果

使用 zip() 函数进行列表推导是最容易的:

[list(t) for t in zip(*list_of_tuples)]

这会将每个单独的元组作为参数应用于使用 *arguments 扩展语法的zip()。 然后zip()将每个元组中的每个值配对到新的元组中。

演示:

>>> list_of_tuples = [('day1', 'name1', 'value1'), ('day2', 'name2', 'value2'), ('day3', 'name3', 'value3')]
>>> [list(t) for t in zip(*list_of_tuples)]
[['day1', 'day2', 'day3'], ['name1', 'name2', 'name3'], ['value1', 'value2', 'value3']]

这会强制输出使用列表;如果您只需要 3 值组合,则可以使用直接zip()

>>> zip(*list_of_tuples)
[('day1', 'day2', 'day3'), ('name1', 'name2', 'name3'), ('value1', 'value2', 'value3')]

在 Python 3 中,使用 list(zip(*list_of_tuples)) 或只循环输出。

相关内容

最新更新