如果给定 python 中的一些元组索引,如何获取子元组列表?
How to get a list of sub tuple if given some indexes of tuple in python?
有一个像
这样的元组列表
l = [(1, 2, 'a', 'b'), (3, 4, 'c', 'd'), (5, 6, 'e', 'f')]
我可以用
[(i[0], i[2], i[3]) for i in l]
得到结果
[(1, 'a', 'b'), (3, 'c', 'd'), (5, 'e', 'f')]
但是如果给定一个变量列表,比如[0, 2, 3]
,如何得到相似的结果呢?
使用operator.itemgetter
,像这样
>>> from operator import itemgetter
>>> getter = itemgetter(0, 2, 3)
>>> [getter(item) for item in l]
[(1, 'a', 'b'), (3, 'c', 'd'), (5, 'e', 'f')]
如果你有索引列表,那么你可以 unpack them 到 itemgetter
,像这样
>>> getter = itemgetter(*[0, 2, 3])
>>> [getter(item) for item in l]
[(1, 'a', 'b'), (3, 'c', 'd'), (5, 'e', 'f')]
您可以使用生成器表达式和 tuple()
提取特定索引:
[tuple(t[i] for i in indices) for t in l]
或者您可以使用 operator.itemgetter()
object 创建一个具有相同功能的可调用对象:
from operator import itemgetter
getindices = itemgetter(*indices)
[getindices(t) for t in l]
其中 indices
是您的索引列表。这是有效的,因为 operator.itemgetter()
在检索多个索引时恰好 return 一个 tuple
对象。
演示:
>>> l = [(1, 2, 'a', 'b'), (3, 4, 'c','d'), (5, 6, 'e','f')]
>>> indices = [0, 1, 2]
>>> [tuple(t[i] for i in indices) for t in l]
[(1, 2, 'a'), (3, 4, 'c'), (5, 6, 'e')]
>>> getindices = itemgetter(*indices)
>>> from operator import itemgetter
>>> [getindices(t) for t in l]
[(1, 2, 'a'), (3, 4, 'c'), (5, 6, 'e')]
有一个像
这样的元组列表l = [(1, 2, 'a', 'b'), (3, 4, 'c', 'd'), (5, 6, 'e', 'f')]
我可以用
[(i[0], i[2], i[3]) for i in l]
得到结果
[(1, 'a', 'b'), (3, 'c', 'd'), (5, 'e', 'f')]
但是如果给定一个变量列表,比如[0, 2, 3]
,如何得到相似的结果呢?
使用operator.itemgetter
,像这样
>>> from operator import itemgetter
>>> getter = itemgetter(0, 2, 3)
>>> [getter(item) for item in l]
[(1, 'a', 'b'), (3, 'c', 'd'), (5, 'e', 'f')]
如果你有索引列表,那么你可以 unpack them 到 itemgetter
,像这样
>>> getter = itemgetter(*[0, 2, 3])
>>> [getter(item) for item in l]
[(1, 'a', 'b'), (3, 'c', 'd'), (5, 'e', 'f')]
您可以使用生成器表达式和 tuple()
提取特定索引:
[tuple(t[i] for i in indices) for t in l]
或者您可以使用 operator.itemgetter()
object 创建一个具有相同功能的可调用对象:
from operator import itemgetter
getindices = itemgetter(*indices)
[getindices(t) for t in l]
其中 indices
是您的索引列表。这是有效的,因为 operator.itemgetter()
在检索多个索引时恰好 return 一个 tuple
对象。
演示:
>>> l = [(1, 2, 'a', 'b'), (3, 4, 'c','d'), (5, 6, 'e','f')]
>>> indices = [0, 1, 2]
>>> [tuple(t[i] for i in indices) for t in l]
[(1, 2, 'a'), (3, 4, 'c'), (5, 6, 'e')]
>>> getindices = itemgetter(*indices)
>>> from operator import itemgetter
>>> [getindices(t) for t in l]
[(1, 2, 'a'), (3, 4, 'c'), (5, 6, 'e')]