在Python中将列表拆分为列表
我有一个清单,里面有更多的内容。该列表可以包含无限的列表。 我想把这些清单分成不同的清单。 下面是一个例子:在Python中将列表拆分为列表,python,list,loops,Python,List,Loops,我有一个清单,里面有更多的内容。该列表可以包含无限的列表。 我想把这些清单分成不同的清单。 下面是一个例子: data = [[1538406000000, 6569.9680123, 6559.8, 6570, 6551.8, 301.21301548], [1538402400000, 6570, 6569.9, 6572.6, 6500, 1796.34637855], [1538398800000, 6604.7, 6570, 6612.4, 6561, 622.39871899], [
data = [[1538406000000, 6569.9680123, 6559.8, 6570, 6551.8, 301.21301548], [1538402400000, 6570, 6569.9, 6572.6, 6500, 1796.34637855], [1538398800000, 6604.7, 6570, 6612.4, 6561, 622.39871899], [1538395200000, 6594.9, 6604.8, 6613.5, 6570, 345.6560351], [1538391600000, 6579.69030138, 6593.9530902, 6603.1, 6555, 1243.109362], [1538388000000, 6617.5, 6579.7, 6622, 6578.6, 344.49315963], [1538384400000, 6628, 6617.5, 6630.2, 6617.4, 231.50416134], [1538380800000, 6602, 6628, 6629.5, 6596.5, 537.99703832], [1538377200000, 6630.4, 6603.9, 6632.12172725, 6600, 135.26208553], [1538373600000, 6627, 6631, 6639.8, 6600, 376.68741732]]
var1 = [data[0][0], data[1][0], data[2][0], ....]
var2 = [data[0][1], data[1][1], data[2][1], ....]
我如何实现自动化
非常感谢这正是列表理解的目的,尽管我认为将数据保持为2D列表
数据
并仅在您想要使用该数据时才提取列表理解更为惯用(每当你发现自己在写这样的代码:foo1=…;foo2=…;foo3=…;
,你可能真的想要foo=[…,…,…]
,这就是数据的本来面目)
var1 = [sublist[0] for sublist in data]
var2 = [sublist[1] for sublist in data]
虽然如果您只是想将行交换为列([所有零索引、所有一索引、所有二索引,…]
),但Python中有一个简洁的习惯用法称为zip star
swapped = zip(*data)
请注意,zip
返回一个迭代器,而不是一个列表,因此您可能必须转换为list
,以执行诸如索引之类的繁杂工作。swapped
的第一个结果是数据的每个子列表的第0个索引,等等。由于您的列表可以是无限制的,我建议使用pandas:
import pandas as pd
data = [[1538406000000, 6569.9680123, 6559.8, 6570, 6551.8, 301.21301548], [1538402400000, 6570, 6569.9, 6572.6, 6500, 1796.34637855], [1538398800000, 6604.7, 6570, 6612.4, 6561, 622.39871899], [1538395200000, 6594.9, 6604.8, 6613.5, 6570, 345.6560351], [1538391600000, 6579.69030138, 6593.9530902, 6603.1, 6555, 1243.109362], [1538388000000, 6617.5, 6579.7, 6622, 6578.6, 344.49315963], [1538384400000, 6628, 6617.5, 6630.2, 6617.4, 231.50416134], [1538380800000, 6602, 6628, 6629.5, 6596.5, 537.99703832], [1538377200000, 6630.4, 6603.9, 6632.12172725, 6600, 135.26208553], [1538373600000, 6627, 6631, 6639.8, 6600, 376.68741732]]
df = pd.DataFrame(data)
df.head()
打印输出:
现在,您可以非常灵活地处理数据。例如:
df.loc[0, :].values
获取作为值列表的第一行。使用numpy
for x in range(0,len(item[0]):
print [sublist[x] for sublist in data]
initia_data=[[1538406000000, 6569.9680123, 6559.8, 6570, 6551.8, 301.21301548], [1538402400000, 6570, 6569.9, 6572.6, 6500, 1796.34637855], [1538398800000, 6604.7, 6570, 6612.4, 6561, 622.39871899], [1538395200000, 6594.9, 6604.8, 6613.5, 6570, 345.6560351], [1538391600000, 6579.69030138, 6593.9530902, 6603.1, 6555, 1243.109362], [1538388000000, 6617.5, 6579.7, 6622, 6578.6, 344.49315963], [1538384400000, 6628, 6617.5, 6630.2, 6617.4, 231.50416134], [1538380800000, 6602, 6628, 6629.5, 6596.5, 537.99703832], [1538377200000, 6630.4, 6603.9, 6632.12172725, 6600, 135.26208553], [1538373600000, 6627, 6631, 6639.8, 6600, 376.68741732]]
data = np.array(initia_data)
for i in range(len(initia_data[0])):
print(data[:,i])
您可以使用内置函数zip
,如下所示:
list1, list2 = map(list, zip(*data))
list1
和list2
将包含给定列表中所需的列表data
不要创建变量数量
改用dict
或list
为数据的每个“列”创建一个新变量很有诱惑力,但不要这样做。这会混淆代码,增加维护代码的复杂性,并确保您无法再有效地处理相关变量
这里有一个使用dict的解决方案:
res_dict = dict(enumerate(map(list, zip(*data)), 1))
下面是另一个简单的列表转换:
res_list = list(map(list, zip(*data)))
您的预期输出是什么样子的?另外,嵌套的预期级别是什么?它会抛出太多的值来解包,因为您将得到六个不同的列表,同时尝试将它们存储在两个变量中。谢谢!
res_list = list(map(list, zip(*data)))