Как объединить два списка по элементам и создать новый список? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть два списка, содержащие некоторые цитаты и их авторов.Как мне создать новый список, который содержит оба элемента из двух списков?

quotes = [
'Tough times don’t last. Tough people do.' ,
'Courage is one step ahead of fear.'
]

authors = [
'Robert H. Schuller',
'Coleman Young'
]

Я хочу, чтобы он возвращал

quotes_list = [
'Tough times don’t last. Tough people do. - Robert H. Schuller' , 
'Courage is one step ahead of fear. - Coleman Young'
]

Любое объяснение будет с благодарностью.Спасибо.

Ответы [ 6 ]

1 голос
/ 27 сентября 2019

Вы ищете str.join и zip как много состояний:

Использование map для ускорения и ' - '.join принимает последовательность строк и соединяет их в одну, разделеннуюисходная строка, в то время как zip делает итерируемую из нескольких последовательностей.

>>> quotes = ['Tough times don’t last. Tough people do.', 'Courage is one step ahead of fear.']
>>> authors = ['Robert H. Schuller','Coleman Young']
>>> list(map(' - '.join, zip(quotes, authors))))
['Tough times don’t last. Tough people do. - Robert H. Schuller', 'Courage is one step ahead of fear. - Coleman Young']

В качестве альтернативы вы также можете использовать понимание списка вместо карты, что является более предпочтительным способом, так как он более читабелен и в большинстве случаев более оптимизированхотя я считаю, что карта должна быть быстрее, хотя я не проверял:

[' - '.join(*s) for s in zip(quotes, authors)]
0 голосов
/ 27 сентября 2019

Вы можете добиться точного поведения, которое вы описываете, используя zip(), f-строки и понимание списка:

quotes_list = [f"{quote} - {author}" for quote, author in zip(quotes, author)]

Объяснение:

Функция zip() создаетсписок кортежей, где i-й кортеж содержит i-й элемент из каждого списка.

zip(quotes, authors) = [('Tough times don’t last. Tough people do.', 'Robert H. Schuller'), ('Courage is one step ahead of fear.', 'Coleman Young')]

Затем мы просто перебираем список и используем f-строки для достижения точного форматирования.

0 голосов
/ 27 сентября 2019

почтовый индекс и присоединиться к ним:

list(map(" - ".join, zip(quotes, authors)))
0 голосов
/ 27 сентября 2019

[' - '.join(x) for x in zip(quotes, authors)] zip позволяет зацикливать элементы обоих списков одновременно, а ' - '.join() объединяет элементы, разделенные тире

0 голосов
/ 27 сентября 2019

Вы можете сделать это с помощью zip и списка :

res = [q + " - " + a for q, a in zip(quotes, authors)]
print(res)

Выход

['Tough times don’t last. Tough people do. - Robert H. Schuller', 'Courage is one step ahead of fear. - Coleman Young']
0 голосов
/ 27 сентября 2019

zip - это то, что вы ищете

zip(quotes, authors)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...