Python如何根据另一列表的筛选条件获取对应位置的目标元素
错误原因
- 原生Python列表不支持将列表作为索引批量取值,只有numpy数组支持该特性,因此你写的
names[pos]会触发TypeError: list indices must be integers or slices, not list错误。 - 你后续写的遍历代码只对变量x做了累加操作,既没有从names列表取值,也没有把结果存入新列表,因此无法得到目标数据。
方案1:直接配对筛选(推荐)
用zip()将姓名和城市一一配对,直接遍历筛选即可,不需要额外计算索引:
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_names = [name for name, city in zip(names, cities) if city == 'SA'] print(sa_names)
运行输出:
['loren', 'jay', 'alex', 'dan']
方案2:基于索引取值(适配原有思路)
如果你需要保留先计算符合条件的索引的逻辑,遍历索引列表逐个取值存入新列表即可:
pos = [i for i in range(len(names)) if cities[i] == 'SA'] sa_names = [] for idx in pos: sa_names.append(names[idx]) print(sa_names)
运行结果和方案1完全一致。
内容的提问来源于stack exchange,提问作者AlfaGoose
相关产品推荐
相关产品推荐

