【问题标题】:How to remove item from enumerated list of tuples如何从枚举的元组列表中删除项目
【发布时间】:2020-06-30 14:02:05
【问题描述】:

假设我有两个姓名和出生年份列表,然后我决定压缩它们并枚举它们,如下所示:

names = ['Boris', 'Billy', 'Tod']
dates = ['1990', '1992', '1994']

pairs = list(zip(names,dates))
pairs_num = list(enumerate(pairs,start=1))

如果此时我需要删除 pairs_num 中的一项,只知道名称,例如“鲍里斯”。我该怎么办?

【问题讨论】:

  • 您想保留enumerate() 的原始索引,还是从列表中获取已删除元素的新索引?

标签: python list tuples zip enumerate


【解决方案1】:

这是使用filter 的一种方法。

例如:

names = ['Boris', 'Billy', 'Tod']
dates = ['1990', '1992', '1994']

pairs = list(zip(names,dates))
pairs_num = list(enumerate(pairs,start=1))
print(list(filter(lambda x: x[1][0] != 'Boris', pairs_num)))

输出:

[(2, ('Billy', '1992')), (3, ('Tod', '1994'))]

但如果你有一个dict 而不是list 会更好。这样您就可以通过使用名称作为键来删除该项目。

【讨论】:

    【解决方案2】:

    您可以使用字典来存储对,这样更容易删除字典中的任何对。

    代码

    names = ['Boris', 'Billy', 'Tod']
    dates = ['1990', '1992', '1994']
    
    pairs = dict((name, date) for name, date in zip(names, dates))
    del pairs["Boris"]
    print(pairs)
    

    输出

    {'Billy': '1992', 'Tod': '1994'}
    

    【讨论】:

    • 更短的应该是pairs = dict(zip(names, dates))
    • @AivarPaalberg 当然!谢谢:)。
    【解决方案3】:

    您可以遍历list(enumerate(pairs,start=1)) 并检查第一个索引中的第二个项目是否等于Boris,如果是则不包含该项目。

    names = ['Boris', 'Billy', 'Tod']
    dates = ['1990', '1992', '1994']
    
    pairs = list(zip(names,dates))
    pairs_num = [i for i in list(enumerate(pairs,start=1)) if i[1][0] != 'Boris']
    print(pairs_num)
    

    输出

    [(2, ('Billy', '1992')), (3, ('Tod', '1994'))]
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 2010-11-26
      相关资源
      最近更新 更多