【问题标题】:Remove elements from lists, code is leaving just one从列表中删除元素,代码只留下一个
【发布时间】:2020-06-03 04:45:24
【问题描述】:

我正在使用字符串和方法进行 Python 练习。 (我知道有一些额外的打印语句和 cmets。)目标是返回列表中的所有其他项目。所以对于第一个例子,目标是返回 - # 应该是 ['a', 'c', 'e', 'g']

我很挣扎,因为我不知道为什么我的代码不会从列表中删除“b”。我错过了什么? .

我查看了以下特定的 StackOverflow 问题。 (加上其他)

def skip_elements(elements):
    L_elements = len(elements)
    for x in elements:
        print("This is L_elements: " , L_elements)
        #print(x)
        if (L_elements % 2 == 0):
          elements.pop((L_elements-1))
          print(elements)
        if (L_elements == 2):
          print("This is L_elements: " , L_elements, "Should equal 2")        
        L_elements = L_elements - 1
    return elements

print(skip_elements(["a", "b", "c", "d", "e", "f", "g"])) # Should be ['a', 'c', 'e', 'g']
print(skip_elements(['Orange', 'Pineapple', 'Strawberry', 'Kiwi', 'Peach'])) # Should be ['Orange', 'Strawberry', 'Peach']
print(skip_elements([])) # Should be []

【问题讨论】:

  • 您可以使用列表理解来保留每个偶数索引。 [x for x in list if list.index(x) % 2 == 0]
  • @alec,请不要使用list作为名字。
  • 对不起,我认为这样的语句会更清晰,而不是使用另一个变量名。正如斯蒂芬所说,“列表”是内置函数的名称,不应用作变量名。

标签: python python-3.x string list methods


【解决方案1】:

如果您查看程序的调试输出,您会发现您的循环没有达到应有的 L_elements 一直到 1。这是因为您在循环中缩短了 elements,因此循环 (for x in elements) 不会像您期望的那样频繁执行。如果您将for x in elements 更改为for i in range(L_elements),它将按预期工作。

虽然把它写成列表理解要简单得多:

def skip_elements(elements):
    return [e for i, e in enumerate(elements) if i % 2 == 0]

【讨论】:

  • 我得到了大部分 - 特别是我减少了我的循环 L_elements 没有达到一个。这是跟进的关键。但是在这种情况下,“列表理解”具体是什么。我知道我可以谷歌它,但那是一个页面的兔子洞。 (无论如何我会的。)我实际上尽量保持在我所知道的范围内。这个评论对你来说可能更简单,但对我来说几乎是类固醇的物理学。谢谢。
  • @LynnLCrawford 最好阅读手册;它解释了列表(或字典)理解基本上是 for 循环的简写。 docs.python.org/3/tutorial/datastructures.html
  • 这是一个很好的资源。我可能会打印一段时间!或者至少把它放在一个窗口中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多