在python3中迭代时删除列表元素

时间:2016-07-18 16:50:42

标签: python-3.x

我正在尝试在遍历列表时删除列表元素(数值)。我有两个例子。示例1有效,但示例2没有,即使两个示例都使用相同的逻辑。

示例1:工作

# adding more data
old.data$amount <- 1:9
old.data$a <- 10:18

# Retain all columns
keep_cols <- colnames(old.data)[-2] # Remove the column which is mentioned in by

setDT(old.data)[order(-date, location), .SD[1L], by = location, .SDcols = keep_cols]

# or assigning colnames to .SDcols directly: 

setDT(old.data)[order(-date, location), .SD[1L], by = location, .SDcols = (colnames(old.data)[-2])]

   location date amount  a
1:       NJ 2016      8 17
2:       NM 2016      7 16
3:       NY 2016      3 12

示例2:无法正常工作

list1=["5","a","6","c","f","9","r"]
print(list1)
for i in list1:
    if str.isnumeric(i):
    list1.remove(i)
print(list1)

我在item_list [:] :)中使用(for i)解决了示例2。但我无法理解为什么第二个例子在第一个地方不起作用的逻辑?

1 个答案:

答案 0 :(得分:0)

我不能声称自己是Python方面的专家,因为我对它很不熟悉,但是我会给你一个我认为可能发生的事情的解释。

第一个示例实际上并没有比第二个示例更好,但是您用来测试它的数据是不同的,所以它没有显示。这个问题似乎是因为你在同一时间迭代任何修改,所以在第二个例子中会发生以下情况:

  • 程序将遍历其给定的列表:

    [“1”,“2”,“a”,“b”,“c”,“1”]

  • 程序从列表项1开始。它是数字,因此被删除。现在列表不同了:

    [“2”,“a”,“b”,“c”,“1”]

  • 当你迭代时,它会移动到列表项2.这是有问题的,因为列表项2是“a”而不是“2”,所以它跳过“2”。

由于第一个示例中的数字由至少一个列表项分隔,因此不会出现问题,因为所有数字都会被迭代。

至于你提到的将list2更改为list2[:]的修复,我不知道那里发生了什么,因为当我通过PythonTutor的visualizor运行程序时,它似乎不起作用。

为了解决这个问题,对我来说最明显的解决方案是尝试向后遍历数组 - 从最终列表项开始并向列表的开头移动,因为这意味着您删除的任何项目都不会影响前一项的编号。

希望我帮忙!