首页 > 解决方案 > 如何更正我的代码,该代码将充当 python 中的排序函数模拟

问题描述

a_trial_list = [11, 965, 253, 7]
for i in range(len(a_trial_list) * 2):
    for j in range(i):
        if a_trial_list[j] > a_trial_list[j + 1]:
            a_trial_list[j],a_trial_list[j + 1] = a_trial_list[j + 1], a_trial_list[j]
            a_trial_list.append(1)
    

for x in a_trial_list:
    if x == 1:
        a_trial_list.remove(x)


print(a_trial_list) 

# this code is returning [7, 11, 253, 965, 1, 1, 1, 1, 1]
# it should return [7, 11, 253, 956]

有人可以向我解释为什么它不删除最后的 1 吗?

标签: pythonsorting

解决方案


您可以使用 try-except 子句来处理索引错误,而不是1每次都追加,然后将其删除。这是代码:

a_trial_list = [11, 965, 253, 7]
for i in range(len(a_trial_list) * 2):
    for j in range(i):
        try:
            if a_trial_list[j] > a_trial_list[j + 1]:
                a_trial_list[j],a_trial_list[j + 1] = a_trial_list[j + 1], a_trial_list[j]
        except IndexError as e:
            pass

print(a_trial_list)

如果您只想1从列表中删除值,可以使用以下列表推导:

a_trial_list[:] = [x for x in a_trial_list if x != 1]

推荐阅读