Member 14019160 Ответов: 1

Проблемы с итерацией списков в Python


Я пытаюсь решить то, что должно быть легкой проблемой:

userInput = input("list element seperated by space: ")
nums = userInput.split()
for x in list(nums):
    y = int(x) * 3
    z = list(str(y))
while "3" in z:
    z.remove("3")
else:
    print(z)

С приведенным выше кодом; логически, все вхождения "3" должны быть удалены из списка. Однако это не работает так, как хотелось бы. Может ли кто-нибудь объяснить, почему и как это исправить?

Я хочу умножить отдельные элементы пользовательского ввода на 3, а затем удалить все экземпляры 3 из списка и распечатать выходные данные.

Я также пробовал в то время как истина и использование i += 1 подсчитывает и все такое, но просто не могу заставить это работать или мою голову вокруг этого. Спасибо за помощь.

input   - desired output - currently outputting

1 2 3   - 6 9            - 9
0       - 0              - 0
2 6 11  - 6 18           - []

Я обнаружил, что то, что я должен использовать, - это понимание списка. Поэтому я провел некоторые исследования по этому вопросу и смог заставить их функционировать, но все еще не так, как хотелось бы:

p = input("list element seperated by space: ")
nums = p.split()
mp = [num for num in nums * 3]
print(mp)
for x in list(nums):
    y = int(x) * 3
    z = str(y)
    print(z)
    c = [z]
filtered = [chr for chr in c if c != "3"]
print(filtered)
for n in list(z):
    negate = [string for string in n if n != "3"]
    print(negate)

Результат остается тем же самым. Я не понимаю, почему и как я могу обойти это?

Почему так трудно отсканировать список на наличие строки и удалить ее из списка?!? :(

Честно говоря, ценю помощь, так как мне хочется стоять лицом к столу-ладошкой-плакать ха-ха :P

Что я уже пробовал:

Stackoverflow, youtube, документация python.

Richard MacCutchan

Я думаю, что проблема заключается в том (хотя я не могу быть уверен в правильном отступе), что вы каждый раз создаете новый список из значения z. Таким образом, в конце программы у вас есть только одно значение в z для печати. Вам нужно начать с пустого списка, а затем добавить каждый элемент в z, если он не является 3. В качестве альтернативы вы можете распечатать каждое число по мере его обработки.

1 Ответов

Рейтинг:
12

Richard MacCutchan

userInput = input("list element seperated by space: ")
nums = userInput.split()
for x in list(nums):
    y = int(x) * 3
    if y != 3:
        print(y, end=' ')
print("")


или с помощью понимания списка
userInput = input("list element seperated by space: ")
nums = userInput.split()
products = [int(x) * 3 for x in nums if x != "1"]
print(products)


Member 14019160

Вы добрались туда раньше, чем я подумал, что было бы неплохо обновить эту страницу! Глупая я! Но я потратил свое время на ютубинг понимания списка и сумел придумать:

иначе, если один операнд = вход (элемент"список разделенных пробелом: ")
нумс = иначе, если один операнд.сплит()
mapped = [str((int(chr) * 3)) для chr в nums]
результат = [ЧР по ЧР в сопоставленных если не ЧР.метода endswith("3")]
печать(сопоставленная)
результат печати)

И это в значительной степени то, что вы предоставили.

Большое спасибо за солидный ответ! :)

Richard MacCutchan

Молодец, что решил ее сам, и рад помочь.
Есть еще несколько полезных подробностей о списках на сайте 5. структуры данных — документация Python 3.4.9[^].