将几个列表连接成单个数据结构

时间:2017-06-24 04:45:27

标签: python list

使用Python,我有两个长度相同的列表,里面的每个数据都以相同的顺序相互关联。因此,我列出了如下列表:

a1=[0, 1, 1, 2]
a2=[o, x, o, o]
-> A=[(0,o), (1,x), (1,o), (2,o)]

后来,我找到了另一个我想添加的列表:

a3=[0,0,1,1]

虽然我可以通过调用前面的列表a1和a2来连接列表,但我想知道是否还有其他简单的方法只使用A和a2来连接它,因为如果有很多列表已经连接起来似乎很艰难这条路;我想要一种可以在未来轻松扩展的方法。

另外,如果在这种情况下制作列表列表不是最好的方法,我想知道我应该使用哪些其他结构。

3 个答案:

答案 0 :(得分:3)

您可以使用Pandas轻松完成此操作。由于您的所有列表都具有相同的长度,因此您可以将每个列表视为Pandas DataFrame中的列。例如:

import pandas as pd

a1 = [0, 1, 1, 2]
a2 = [o, x, o, o]
A = pd.DataFrame({'a1': a1, 'a2': a2})

现在你有这样的事情:

  a1 a2
0  0  o
1  1  x
2  1  o
3  2  o

您可以为其添加列:

a3 = [0,0,1,1]
A['a3'] = a3

第一个未命名的列是“索引”,因此您可以像这样使用它:

>>> print(A.loc[0])
0 o 0

您还可以访问特定列:

>>> print(A['a3'])
0 0 1 1

此解决方案比列表列表更有效,并且随着数据的增长将提供更快的性能。例如,您可以使用A['a1'].sum()非常快速地对整个列求和,或者使用A['a1'] + A['a3']添加列(提供0 1 2 3)。

答案 1 :(得分:1)

这是一种简单的扩展A的方法:

对于每个新列表,将a3替换为此表达式中的列表名称并运行它:

A = [A[i] + (a3[i],) for i in range(len(a3))]

答案 2 :(得分:1)

我的建议:

a1=[0,1,1,2]
a2=['o','x','o','o']
a3=[0,0,1,1]

def adjoin(*lists):
    return [i for i in zip(*lists)]

# usage:
A= adjoin(a1,a2,a3)
# result: A -> [(0, '0', 0), (1, 'x', 0), (1, 'o', 1), (2, 'o', 1)]