[英]How to index multiple item positions and get items from another list with those positions?
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
您可以 zip 将名称年龄和城市放在一起,然后使用列表理解按城市过滤这些名称
[(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"] )
Output:
['loren', 'jay', 'alex', 'dan']
请参阅: enumerate
python.org
如何创建一个包含所有 SA 人员姓名的新列表?
Oneliner(但问题可能不清楚)使用zip
和带有过滤器的列表理解
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
迭代names
和cities
列表,生成“(<a_name>, <a_city>)”形式的元组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.