Добавить элемент в каждый подмассив python

У меня есть массив arr_ = [['a', 'b'], ['x', 'y']] Я хочу поставить в начале каждого подмассива символ ! так что это должно выглядеть круто [['!', 'a', 'b'], ['!', 'x', 'y']] это то, что я сделал до сих пор:

def concat(*args):
    return ['!', *args]
arr_ = [['a', 'b'], ['x', 'y']]
n = map(concat, arr_)
print(list(n))

но результат [['!', ['a', 'b']], ['!', ['x', 'y']]] Что я должен делать?

Вместо ['!', *args] вы можете использовать ['!'] + args

Robert Seaman 13.12.2020 14:16

@RobertSeaman Это не сработает как единственное изменение ...

Tomerikoo 13.12.2020 14:18

Да, я не видел *args в аргументах функции. Спасибо @Tomerikoo!

Robert Seaman 13.12.2020 14:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
659
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

просто удалите * в аргументе картографа:

def concat(args):
    return ['!', *args]
arr_ = [['a', 'b'], ['x', 'y']]
n = map(concat, arr_)
list(n)
>>> [['!', 'a', 'b'], ['!', 'x', 'y']]

что происходит, вы упаковываете, а затем распаковываете списки на каждой итерации...

когда вы добавляете * к аргументу, вы превращаетесь в список, содержащий 1 элемент. когда вы пропустите этот этап, вы можете получить настоящий список и распаковать его с помощью * в операторе списка return ['!', *args], что эквивалентно выполнению: ['!'] + args добавить '!' в начале

это будет работать, как и ожидалось, если вы выполните def concat(args): Что происходит, так это то, что если вы укажете *args в качестве параметра, каждый переданный вами параметр будет помещен в список, хранящийся в *args И вы передаете такие вещи, как ['a', 'b'] Итак, это будет помещено в список, так что на самом деле аргументы: [['a', 'b']] а затем в своем возвращении вы распаковываете этот список но он содержит только один элемент, который является исходным списком так что вы получите ['!', ['a', 'b']]

просто примечание, карта обычно считается непитоновской, поскольку у нас также есть понимание списка: n = [concat(inner) for inner in arr_]

вы можете сделать еще один шаг и сделать это: n = [['!'] + inner for inner in arr_]

Я не знаю, как объяснить ошибку в вашем коде. Но я нашел другой способ сделать это.

arr = [['a', 'b'], ['x', 'y']]
X = []
for i in arr:
    X.append(['!'] + i)
print(X)

Выход:

[['!', 'a', 'b'], ['!', 'x', 'y']]

Использование понимания списка:

arr = [['a', 'b'], ['x', 'y']]
X = [['!'] + x for x in arr]
print(X)

Выход:

[['!', 'a', 'b'], ['!', 'x', 'y']]

Другие вопросы по теме