Решение:
Вы можете сделать это, используя zip
и два разных объединения:
',\n'.join([', '.join(items) for items in zip(a, b, c)])
или, как предложено rafaelc:
',\n'.join(map(', '.join, zip(a, b, c)))
Объяснение:
zip
zip
группирует элементы различных итераций, которые вы предоставляете, по позиции.
zip(['a0', 'a1', 'a2', ...], ['b0', 'ba1', 'b2', ...], ['c0', 'c1', 'c2', ...])
возвращает:
('a0', 'b0', 'c0'), ('a1', 'b1', 'c1'), ('a2', 'b2', 'c2'), ...
Зависит от вашей версии Python, он может возвращать его как список или как генератор, но оба они итерируемы, поэтому проблем не должно быть.
map
map
применяет функциюпередается в качестве первых аргументов каждому элементу итерируемого, передается в качестве второго аргумента и возвращает результирующее итерируемое.
Таким образом, оно будет применяться ', '.join
к ('a0', 'b0', 'c0')
, затем оно будет применяться ', '.join
к ('a1', 'b1', 'c1')
,...
', '.join(('a0', 'b0', 'c0')), ', '.join(('a1', 'b1', 'c1')), ', '.join(('a2', 'b2', 'c2')), ...
и с другим объединением у нас будет:
',\n'.join( ', '.join(('a0', 'b0', 'c0')), ', '.join(('a1', 'b1', 'c1')), ', '.join(('a2', 'b2', 'c2')), ... )
Понимание списка
Понимание списка - это то, что используется в первом решении вместокарты, применяя ',' .join к каждому элементу итерируемого.
[', '.join(item) for item in zip(a, b, c)]
эквивалентно:
map(', '.join, zip(a, b, c))
за исключением того, что понимание списка возвращает список, а вызов map возвращает итерацию, но это не имеет никакого значения, так как внешнее соединение принимает итерации, а списки также являются итерациями.
join
join
создает строку, объединяющую элементы итерируемого, переданного в качестве аргумента, используя в качестве разделителя строку, из которой она была вызвана.
"-".join(['Hello', 'World'])
возвращает:
'Hello-World'
Применение внутренних объединений:
',\n'.join( [ 'a0, b0, c0', 'a1, b1, c1', 'a2, b2, c2', ... ] )
И применение внешнего
'a0, b0, c0,\na1, b1, c1,\na2, b2, c2,\n...'
Некоторые комментарии:
Они могут быть только частью упрощения проблемыВы сделали это здесь:
- Не используйте имена PascalCase для переменных, используйте snake_case.
- Старайтесь избегать использования переменной, определяющей тип переменной.