如何切片 python 中的元组列表?
How to slice a list of tuples in python?
假设:
L = [(0,'a'), (1,'b'), (2,'c')]
如何得到每个 tuple
的索引 0
作为伪装的结果:
[0, 1, 2]
为此,我使用了 python list comprehension
并解决了问题:
[num[0] for num in L]
不过,这一定是一种 pythonic 方式来 像 L[:1]
那样切片,但是当然这种切片不起作用。
有没有更好的解决方案?
您可以使用 *
与 zip()
解包。
>>> l = [(0,'a'), (1,'b'), (2,'c')]
>>> for item in zip(*l)[0]:
... print item,
...
0 1 2
对于 Python 3,zip()
不会自动生成 list
,因此您要么必须将 zip
对象发送到 list()
或使用 next(iter())
或其他东西:
>>> l = [(0,'a'), (1,'b'), (2,'c')]
>>> print(*next(iter(zip(*l))))
0 1 2
但是你的已经很好了。
你的解决方案对我来说看起来是最pythonic的;你也可以
tuples = [(0,'a'), (1,'b'), (2,'c')]
print zip(*tuples)[0]
...但对我来说太过分了"clever",列表理解版本更清晰。
>>> list = [(0,'a'), (1,'b'), (2,'c')]
>>> l = []
>>> for t in list:
l.append(t[0])
map
呢?
map(lambda (number, letter): number, L)
将其切成 python 2
map(lambda (number, letter): number, L)[x:y]
在python3中你必须先把它转换成list:
list(map(lambda (number, letter): number, L))[x:y]
您可以将其转换为 numpy 数组。
import numpy as np
L = [(0,'a'), (1,'b'), (2,'c')]
a = np.array(L)
a[:,0]
假设:
L = [(0,'a'), (1,'b'), (2,'c')]
如何得到每个 tuple
的索引 0
作为伪装的结果:
[0, 1, 2]
为此,我使用了 python list comprehension
并解决了问题:
[num[0] for num in L]
不过,这一定是一种 pythonic 方式来 像 L[:1]
那样切片,但是当然这种切片不起作用。
有没有更好的解决方案?
您可以使用 *
与 zip()
解包。
>>> l = [(0,'a'), (1,'b'), (2,'c')]
>>> for item in zip(*l)[0]:
... print item,
...
0 1 2
对于 Python 3,zip()
不会自动生成 list
,因此您要么必须将 zip
对象发送到 list()
或使用 next(iter())
或其他东西:
>>> l = [(0,'a'), (1,'b'), (2,'c')]
>>> print(*next(iter(zip(*l))))
0 1 2
但是你的已经很好了。
你的解决方案对我来说看起来是最pythonic的;你也可以
tuples = [(0,'a'), (1,'b'), (2,'c')]
print zip(*tuples)[0]
...但对我来说太过分了"clever",列表理解版本更清晰。
>>> list = [(0,'a'), (1,'b'), (2,'c')]
>>> l = []
>>> for t in list:
l.append(t[0])
map
呢?
map(lambda (number, letter): number, L)
将其切成 python 2
map(lambda (number, letter): number, L)[x:y]
在python3中你必须先把它转换成list:
list(map(lambda (number, letter): number, L))[x:y]
您可以将其转换为 numpy 数组。
import numpy as np
L = [(0,'a'), (1,'b'), (2,'c')]
a = np.array(L)
a[:,0]