a = [1, 2]
print a * 2
производит [1, 2, 1, 2]
. ТеперьПреобразовать [[1, 2], [3, 4]] в [[1, 2, 1, 2], [3, 4, 3, 4]] без зацикливания
b = [[1, 2], [3, 4]]
Могу ли я конвертировать b
в [[1, 2, 1, 2], [3, 4, 3, 4]]
без зацикливания?
a = [1, 2]
print a * 2
производит [1, 2, 1, 2]
. ТеперьПреобразовать [[1, 2], [3, 4]] в [[1, 2, 1, 2], [3, 4, 3, 4]] без зацикливания
b = [[1, 2], [3, 4]]
Могу ли я конвертировать b
в [[1, 2, 1, 2], [3, 4, 3, 4]]
без зацикливания?
Учитывается ли список как цикл?
>>> [x*2 for x in b]
[[1, 2, 1, 2], [3, 4, 3, 4]]
Это, вероятно, так, но нет причин, по которым я не могу думать о том, чтобы не использовать его. – Linuxios
Как говорили другие, итерация произойдет независимо от того, хотите ли вы решить проблему для произвольного количества списков. Если список содержит только 2 членов, следующее решение работает без итерации:
b = [[1, 2], [3, 4]]
# Uses iterable unpacking, which may be considered iteration
l1, l2 = b
# If you don't want iterable unpacking, use that instead:
# l1 = b[0]; l2 = b[1]
print [l1 * 2, l2 * 2]
Для произвольного числа списков и «скрытая» итерация (вы перебор с функцией map
, а не с явным for
циклом) , попробуйте следующее:
b = [[1, 2], [3, 4]]
print map(lambda x: x * 2, b)
'map (lambda' ... ouch – mhlester
@mhlester Ну, это ужасный вкус, но OP * спросил * без итерации. Конечно, я тоже использовал бы понимание списка или цикл' for' в реальном мире;) –
Если вы не можете использовать циклы, не стесняйтесь использовать рекурсию:
def expand(mylist,n):
if len(mylist)==1:
return [mylist[0]*n]
else:
return [mylist[0]*n] + expand(mylist[1:],n)
Вход:
a = [[1,2],[3,4],[5,6]]
вызовов:
expand(a,2)
Выходные:
[[1, 2, 1, 2], [3, 4, 3, 4], [5, 6, 5, 6]]
Если вы не возражаете список кортежей, вы можете попробовать некоторые zip
махинации:
zip(*zip(*b)*2)
который возвращается
[(1, 2, 1, 2), (3, 4, 3, 4)]
, что является довольно хорошим значком. ** + 1 ** – mhlester
Вы можете использовать map
:
>>> b = [[1, 2], [3, 4]]
>>> list(map(lambda l: l*2, b))
[[1, 2, 1, 2], [3, 4, 3, 4]]
Это то же самое, что и понимание списков, гораздо менее читаемое. –
Это своего рода суровый. OP сказал, что «нет циклов», и читаемость находится в поле зрения наблюдателя. – dawg
Ну, теперь я слишком напуган, чтобы опубликовать «список (карта (список, карта (chain.from_iterable, map (partial (repeat, times = 2), b))))', хотя это интересно, если люди идут чтобы опросить ответы, которые, возможно, удовлетворяют (откровенно глупым) требованиям. [+1.] – DSM
Почему без зацикливания? С циклом это так же просто, как это: 'b = [x * 2 для x в a]'. – Linuxios
Почему опускаются вопросы по этому вопросу? Возможно, это относится к codegolf, но в остальном я не уверен, что с ним не так. – wflynny
@Bill, пока не появится объяснение, почему цикл не разрешен, это ужасно бесполезный гандикап – mhlester