У меня есть массив 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']]]
Что я должен делать?
@RobertSeaman Это не сработает как единственное изменение ...
Да, я не видел *args в аргументах функции. Спасибо @Tomerikoo!






просто удалите * в аргументе картографа:
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']]
Вместо
['!', *args]вы можете использовать['!'] + args