Как умножить элементы в списках на символы и целые числа?

#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() функцию слежения, вы не сможете вызвать эту функцию.