#python #list #for-loop #list-comprehension #thonny
#python #Список #for-цикл #понимание списка #тонни
Вопрос:
извините за вопрос для начинающих, но я слишком долго возился с этим до сих пор, и я уверен, что это простое решение.
Итак
Для упражнения я меняю это простое понимание списка обратно на цикл for :
numbers = [n for n in range(10)]
listcomp = [n/2 for n in numbers if n%2 == 0]
Очевидно, что все, что это делает, это принимает числа от 0 до 9, делит их на 2, чтобы получить значения с плавающей запятой от 0.0 до 4.5, а затем удаляет записи из списка, остатки которых при делении на 2 не равны 0, оставляя только целые числа от 0.0 до 4.0. Вот что, как я думал, сработает,проблема на данный момент заключается в том, что оператор if и второе добавление, похоже, не имеют никакого эффекта, и я не уверен, почему. Я хотел бы понять эту проблему, если кто-нибудь может объяснить.
numbers = []
newlist = []
for num in range(0, 10):
numbers.append(num/2)
for n in numbers:
if n%2 == 0:
newlist.append
Комментарии:
1.
numbers.append(num)
?2.
numbers.append(num)
аnewlist.append(n/2)
может быть? Я думаю, это ближе к вашему исходному коду.3. Спасибо за ответы, это сработало, и проблема решена. Очень признателен.
Ответ №1:
Для первого цикла вы перебираете диапазон и добавляете значение каждого числа в этом диапазоне, разделенное на два. В первом понимании списка все, что вы делаете, это создаете список, содержащий все целые числа в этом заданном диапазоне. Во втором цикле for вы в основном проверяете, является ли число четным, а затем вообще не добавляете число : newlist.append
. Во втором понимании списка вы добавляете число, деленное на два, если число четное.
Измените свои циклы на:
for num in range(0, 10):
numbers.append(num)
for n in numbers:
if n%2 == 0:
newlist.append(n/2)
Возможно, также стоит отметить, что вместо того, чтобы перебирать диапазон чисел, а затем просто добавлять это число, вы можете сделать свой код более чистым, заменив первый цикл for на:
mylist = list(range(10))