#python #python-3.x #list #char #integer
Вопрос:
ввод = [1,4,6,»j»,5,»h»,»t»] умножьте и добавьте на 2 к элементам в этом списке вывод = [4,10,14,»j»,12,»h»,»t»] Как я могу получить этот вывод В python??
Комментарии:
1. Не используйте
input
в качестве имени переменной, вы затеняете встроенную функцию. Ваша проблема может быть решена с помощью простого списка .[i * 2 2 if isinstance(i, int) else i for i in l]
Обратите внимание, что вы можете передать кортеж типов вisinstance()
, если хотите, чтобы он также работал с float .2. Большое тебе спасибо …
Ответ №1:
Я предлагаю использовать isinstance
, как показал @Olvin Rogh, или type()
.
new = [num*2 2 if type(num) == int else num for num in inp]
выход
[4, 10, 14, 'j', 12, 'h', 't']
Ответ №2:
input = [1,4,6,"j",5,"h","t"]
output = []
for idx, item in enumerate(input):
if type(item) is int:
item *= 2
item = 2
output.append(item)
Я понимаю, что это значительно больший код, чем другие ответы, но мне интересно, не менее ли он эффективен…потому что встраивание чего-то внутри [] в python также может рассматриваться как цикл for, верно?
Комментарии:
1. Это немного менее эффективно, чем понимание списка , но это нормально. Вы используете операторы умножения и сложения на месте (
*=
,=
), что здесь не лучший вариант, лучше и короче будетitem = item * 2 2
. Кроме того, использованиеenumerate()
не приносит никакой пользы, так как вам не нужны индексы, поэтому вы можете просто перебирать списокfor item in input
. И последнее предложение: не используйтеinput
или любое другое имя встроенной функции в качестве имени переменной, потому что вы затеняете эту функцию.2. Спасибо за комментарий, я думаю, что понимаю все, что вы сказали, кроме затенения. Переопределяю ли я
input()
функцию и не смогу ли я вызвать ее из-заinput
инициализации?3. Да,
input = ...
как только вы напишетеinput()
функцию слежения, вы не сможете вызвать эту функцию.