【问题标题】:Removing an integer from a list during iteration?在迭代期间从列表中删除一个整数?
【发布时间】:2017-05-27 18:55:14
【问题描述】:

这是我遇到错误的代码。我收到错误:“列表索引超出范围”,我知道这是因为您无法在迭代中删除项目,但我需要,但我不知道如何。

我实际上是在尝试对该列表进行排序,但找到最小值,然后将其附加到新列表中并将其从旧列表中删除,但我不知道如何。请帮忙。

代码:

list = [22,1,-5,-10,62,-11,36,8]
m = list.index(min(list))
sorted_list = []

for x in range(len(list)):
    if list[x] > list[m]:
        sorted_list.append(list[m])
        list.remove(list[m])


print (sorted_list)

【问题讨论】:

  • 这应该做什么?它似乎没有对任何东西进行排序。你为什么不存储值,而不是它的索引?输出应该是什么?
  • 老实说,这可能是完全错误的,我只是想获得一些帮助:/
  • 然后解释你想要达到的目标。给定输入,输出应该是什么?为什么?
  • 您是在尝试对列表进行排序(只需使用sorted_list = sorted(list)),还是在尝试学习如何实现特定的排序算法?
  • (具体来说,您似乎正在尝试实现selection sort。)

标签: python


【解决方案1】:

此代码应将列表从小到大排序,然后删除最小的并将其转移到新列表中。

List = [22,1,-5,-10,62,-11,36,8]
List2 = []
swapped = True
while swapped:
    swapped = False
    for i in range(len(List)-1):
        if List[i] > List[i + 1]:
            List[i],List[i+1] = List[i + 1],List[i]
            swapped = True
List2.append(List[0])
List.remove(List[0])

print(List)
print(List2)

【讨论】:

  • 这与 OP 试图实现的算法不同。
【解决方案2】:

对于您所描述的任务,您必须每次都找到新的最小值:

my_list = [22, 1, -5, -10, 62, -11, 36, 8]
new_list = []

while my_list:
    my_min = min(my_list)
    new_list.append(my_min)
    my_list.remove(my_min)

【讨论】:

  • 我试图避免使用“排序”选项。不过感谢您的回复。
  • @JosephCranney 所以你想在不包括最小元素的情况下对列表进行排序?
  • 我只想通过将第一个列表的最小值附加到一个新列表来对列表进行排序,然后一旦附加,我想从第一个列表中删除它,然后重复...等等(找到新的最小值,重复)。
  • 非常感谢,这是否适用于 for 循环?只是想知道,不过非常感谢。
【解决方案3】:

while 循环比较好,你需要一步一步地把最小的项保留在新列表(排序列表)中,然后将其从旧列表中删除,并重复此操作直到旧列表为空。

   while (len(list) <= 1):
        sorted_list = sorted_list.append(min(list))
        list = list.remove(min(list))

    print(sorted_list)

【讨论】:

  • 来自审核队列:我可以请求您在您的答案周围添加更多上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 2011-09-23
  • 2018-07-24
  • 2011-03-18
  • 1970-01-01
  • 2021-03-04
相关资源
最近更新 更多