Ste*_*ski 64
如果您已命名元组,则可以执行以下操作:
results = [t.age for t in mylist if t.person_id == 10]
Run Code Online (Sandbox Code Playgroud)
否则使用索引:
results = [t[1] for t in mylist if t[0] == 10]
Run Code Online (Sandbox Code Playgroud)
或者按照Nate的回答使用元组解包.请注意,您不必为解压缩的每个项目指定有意义的名称.你可以(person_id, age, _, _, _, _)打开一个六项元组.
Nat*_*ate 14
对此的一个解决方案是列表理解,在元组内部使用模式匹配:
>>> mylist = [(25,7),(26,9),(55,10)]
>>> [age for (age,person_id) in mylist if person_id == 10]
[55]
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用map和filter:
>>> map( lambda (age,_): age, filter( lambda (_,person_id): person_id == 10, mylist) )
[55]
Run Code Online (Sandbox Code Playgroud)
是的,如果您知道所需列位于元组中的哪个位置,则可以使用过滤器.如果情况是id是元组的第一个元素,那么你可以像这样过滤列表:
filter(lambda t: t[0]==10, mylist)
Run Code Online (Sandbox Code Playgroud)
这将返回相应元组的列表.如果你想要年龄,只需选择你想要的元素.您也可以使用列表理解并在第一步中选择元素,而不是过滤器.您甚至可以立即解压缩(如果只有一个结果):
[age] = [t[1] for t in mylist if t[0]==10]
Run Code Online (Sandbox Code Playgroud)