Python 将格式M=[(a,x),(b,y)]分为M1=[a,b]和M2=[x,y]的单独列表

Python 将格式M=[(a,x),(b,y)]分为M1=[a,b]和M2=[x,y]的单独列表,python,list,csv,for-loop,Python,List,Csv,For Loop,我在下面有一个列表M,它来自一个外部文件(实际上这是一个很大的列表,len(M)>10000) M=[(1100),(2200),(3300),(4400)] 但是,我想把它分为M1=[1,2,3,4]和M2=[100200300400]。 这是我目前的做法 我想知道是否有一种更简单、更有效的方法,一种使用Python内置函数的解决方案 就这么做吧: M1, M2 = zip(*M) M1和M2将是元组。如果需要,可以将它们转换为列表: M1, M2 = map(list, zip(*M))

我在下面有一个列表M,它来自一个外部文件(实际上这是一个很大的列表,
len(M)>10000

M=[(1100),(2200),(3300),(4400)]

但是,我想把它分为
M1=[1,2,3,4]
M2=[100200300400]
。 这是我目前的做法

我想知道是否有一种更简单、更有效的方法,一种使用Python内置函数的解决方案

就这么做吧:

M1, M2 = zip(*M)
M1和M2将是元组。如果需要,可以将它们转换为列表:

M1, M2 = map(list, zip(*M))
或者使用genexp:

M1, M2 = (list(i) for i in zip(*M))
就这么做吧:

M1, M2 = zip(*M)
M1和M2将是元组。如果需要,可以将它们转换为列表:

M1, M2 = map(list, zip(*M))
或者使用genexp:

M1, M2 = (list(i) for i in zip(*M))
你可以

M1, M2 = zip(*M)
这适用于元组和列表

但是,如果您确实有一个很长的外部文件,那么您的初始版本可能会更快,因为这种方法将向zip发送10k个参数,从而将所有内容保留在内存中。

您可以这样做

M1, M2 = zip(*M)
这适用于元组和列表


但是,如果您确实有一个很长的外部文件,那么您的初始版本可能会更快,因为这种方法将向zip发送10k个参数,从而将所有内容保留在内存中。

一种比您的解决方案更有效,因为它使用隐式循环:

>>> [m1 for m1, _ in M]
>>> [1, 2, 3, 4]
>>> [m2 for _, m2 in M]
>>> [100, 200, 300, 400]
但是更好的方法是使用
*
操作符和
zip

>>> M1, M2 = zip(*M)
>>> M1
(1, 2, 3, 4)
>>> M2
(100, 200, 300, 400)

一个比您的解决方案更有效的解决方案是,它使用隐式循环:

>>> [m1 for m1, _ in M]
>>> [1, 2, 3, 4]
>>> [m2 for _, m2 in M]
>>> [100, 200, 300, 400]
但是更好的方法是使用
*
操作符和
zip

>>> M1, M2 = zip(*M)
>>> M1
(1, 2, 3, 4)
>>> M2
(100, 200, 300, 400)