【问题标题】:How to index multiple item positions and get items from another list with those positions?如何索引多个项目位置并从具有这些位置的另一个列表中获取项目?
【发布时间】:2021-12-28 09:46:27
【问题描述】:
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

【问题讨论】:

标签: python


【解决方案1】:

如何创建一个包含所有 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 列表,生成 "(, )"

形式的元组

【讨论】:

    【解决方案2】:

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

    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']
    

    见:enumerate on python.org

    【讨论】:

      【解决方案3】:

      您可以将名称年龄和城市压缩在一起,然后使用列表推导按城市过滤这些名称

       [(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')]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 2016-02-27
        • 2023-01-05
        • 2010-09-26
        • 2013-04-11
        • 1970-01-01
        相关资源
        最近更新 更多