从列表中删除元素,代码只剩下一个

2024-04-26 23:57:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用字符串和方法开始python练习。(我知道还有一些额外的打印语句和注释。)目标是从列表中返回其他每一项。因此,对于第一个例子,目标是返回-#应该是['a','c','e','g']

我很挣扎,因为我不明白为什么我的代码不能从列表中删除“b”。我错过了什么

我已经研究了以下具体问题。(加上其他)

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

Tags: offrom目标列表onelementsbethis
1条回答
网友
1楼 · 发布于 2024-04-26 23:57:45

如果您查看程序的调试输出,您将看到循环并没有像它应该的那样从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]

相关问题 更多 >