假设我有一个像下面这样的元组列表
counts=[(0,0,17),(0,0,90)]
我想创建三个变量或列表,例如
a b c
0 0 17
0 0 90
我想使用List comprehensions来做到这一点。
我的计数是地图功能的结果。我想将值分配给三个不同的pandas列为a,b和c。
建议?
答案 0 :(得分:5)
您不需要 list comprehension 来实现此目的。 Python内置zip
函数,根据列表元素的索引将列表解压缩为:
>>> counts=[(0,0,17),(0,0,90)]
>>> a, b, c = zip(*counts)
>>> a
(0, 0)
>>> b
(0, 0)
>>> c
(17, 90)
答案 1 :(得分:2)
你走了:
a,b,c = [ [i[j] for i in counts] for j in range(0,3)]
请注意嵌套理解 - here's a good resource描述它们的工作原理。
答案 2 :(得分:1)
有很多方法。如果您打算使用表格数据,请考虑使用pandas
import pandas as pd
counts=[(0,0,17),(0,0,90)]
df = pd.DataFrame(counts)
df.columns=["a", "b", "c"]
现在,在python shell中,df看起来像:
Out[3]:
a b c
0 0 0 17
1 0 0 90
第一列有索引,基本上是表上的主键。要恢复任何列表,您只需执行
df.a
生成一个Series类型,其值为int64:
Out[11]:
0 0
1 0
Name: a, dtype: int64
再次,显示的第一列是索引(零索引像普通的python列表一样)。
您可以熟悉的方式访问系列中的值:
df.a[0]
Out[12]:
0
最后,如果您需要返回一个列表,您只需执行
即可a = list(df.a)
等等。
答案 3 :(得分:0)
如果出于某种原因想要动态创建变量,可以按如下方式更新counts=[(0,0,17),(0,0,90)]
globals().update({k: t for k, t in zip('abc', zip(*counts))})
# In [23]: c
# Out[23]: (17, 90)
:
{{1}}
答案 4 :(得分:0)
如果使用numpy:
import numpy as np
print(np.array(counts).transpose())
输出
[[ 0 0]
[ 0 0]
[17 90]]
当然,我们可以将3x2数组解压缩到a
,b
和c
:
a, b, c = np.array(counts).transpose()