del C [0] до len (C) == 1 с циклом while - PullRequest
1 голос
/ 18 апреля 2020

По сути, я хочу удалить каждый элемент слева от списка, пока не останется один элемент. А потом перерыв. Я также перебираю каждый индекс c, так как это список подсписков. Я удаляю первый элемент во внутреннем списке. (например, список == 1234 .... 1234, 234, 34 и, наконец, 4)

Редактировать: Мой компьютер был очень странным в последнее время. Если время l oop не бесконечно на вашем компьютере. Пожалуйста, рассмотрите любые ошибки, которые я могу или мог бы внести в бесконечное число oop. Я не знаю, что происходит.

r=[];
c = [[1,2],[3,2],[3],[1]]
for j in range(1, len(c)):
    if str(any(elem in c[0] for elem in c[j])) == 'False':
        r.append(c[j])
if j == len(c) - 1:
    del c[0]
    r[:] = []
    print(r, c)

Вывод

[] [[3, 2], [3], [1]]

Детализация результатов

# The statement has succesfully deleted c[0]
# >>> c
#[[3, 2], [3], [1]]

#The statement has succesfully cleared the list
# >>> r
#[]


# Basically, I want to delete each element to the left of the list until there is one element left. And then break. 

# (eg. 1234, 234, 34, and finally 5)
# There are 10 steps in this loop. because 1+2+3+4 == 10

В то время как l oop, который предназначен для выполнения приведенных выше утверждений, теперь застрял в бесконечности для l oop.

c = [[1,3],[3,2],[3,4],[1]]
r=[];
while len(c) > 1:
    for j in range(1, len(c)):
        if str(any(elem in c[0] for elem in c[j])) == 'False':
            r.append(c[j])
            r.append(c[0])
            # we use print(r) to show bug
            print(r)
        if j == len(c) - 1:
            # This statement is intended to break an infinite loop but fails to do so.
            del c[0]
            r[:] = []
            if len(c) == 1:
                quit()



print(r)

output

[3,4],[1],[2,3],[1,3],[1,3]... infinite loop output

Выход не является проблемой. Нет необходимости вдаваться в подробности о выходе. Мне просто нужно выяснить, как l oop через список элементов, как показано выше.

Вопрос

Какие мои ошибки в моем времени l oop, которые делают его бесконечным l oop? Есть ли какие-нибудь решения, которые вы можете дать мне, чтобы я мог научиться не повторять ту же ошибку снова?

1 Ответ

1 голос
/ 18 апреля 2020

Может ли это быть?

c = [[1,3], [3,2], [3,4], [1]]
r = []

while len(c) - 1:
    r.append(c.pop(0))

print("r", r, "\nc", c)

# results:
# r [[1, 3], [3, 2], [3, 4]] 
# c [[1]]
...