如何索引多个项目位置,并从另一个具有这些位置的列表中获取项目


names = ['vik', 'zed', 'loren', 'tal', 'yam', 'jay', 'alex', 'gad', 'dan', 'hed']
cities = ['NY', 'NY', 'SA', 'TNY', 'LA', 'SA', 'SA', 'NY', 'SA', 'LA']
ages = ['28', '26', '26', '31', '28', '23', '29', '31', '27', '41']

如何创建一个包含SA所有人员姓名的新列表?

我尝试获取所有"SA"职位,然后打印姓名列表中的相同职位,

pos = [i for i in range(len(names)) if cities[i] == 'SA']
print(names[pos]) 

返回以下错误:

TypeError: list indices must be integers or slices, not list

我也尝试过在城市中循环定位,然后做几乎相同的事情,但一个接一个,但我仍然无法列出

pos = [i for i in range(len(names)) if cities[i] == 'SA']
x = 1
for i in pos:
x+=1

您可以将姓名、年龄和城市压缩在一起,然后使用列表理解按城市进行过滤

[(a,b,c) for a,b,c in zip(names, cities, ages) if b == "SA"]

返回

[('loren', 'SA', '26'), ('jay', 'SA', '23'), ('alex', 'SA', '29'), ('dan', 'SA', '27')]

枚举城市列表,以便获得它们的索引,并在城市匹配时收集名称:

names = ['vik', 'zed', 'loren', 'tal', 'yam', 'jay', 'alex', 'gad', 'dan', 'hed']
cities = ['NY', 'NY', 'SA', 'TNY', 'LA', 'SA', 'SA', 'NY', 'SA', 'LA'] 

print( [names[idx] for idx,c in enumerate(cities) if c == "SA"] ) 

输出:

['loren', 'jay', 'alex', 'dan']

参见:python.org 上的enumerate

如何创建一个包含SA所有人员姓名的新列表

使用zip的Oneliner(但可能问题不清楚(和带有过滤器的列表理解

lst = [n for n, c in zip(names, cities) if c == 'SA']
print(lst)

输出:

['loren', 'jay', 'alex', 'dan']

解释

oneliner相当于:

lst = []
for name, city in zip(names, cities):
if city == 'SA':
lst.append(name)
print(lst)

zip并行地在namescities列表上迭代,产生形式为"em"的元组;(<a_name>,<a_city>(">

最新更新