Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 23, 2020 13:11:56

DuffyDuck
Зарегистрирован: 2020-09-07
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Получить один список из двух других списков

Здравствуйте, хотел бы из таких двух списков:

 girls = ['Аня', 'Катя', 'Маша', 'Света']
 boys = ['Петя', 'Вася']
Получить такой:
 ['Аня', 'Петя', 'Катя', 'Вася', 'Маша', 'Света']
то есть по-очереди: нулевое значение из первого списка, нулевое из второго, первое значение из первого списка, первое значение из второго и т. д.
Уверен что есть решение изящнее чем то, что я наваял:
 girls = ['Аня', 'Катя', 'Маша', 'Света']
boys = ['Петя', 'Вася']
names = []
if len(girls) <= len(boys):
    for i in range(len(boys)):
        names.extend(girls[i:i+1] + boys[i:i+1])
else:
    for i in range(len(girls)):
        names.extend(girls[i:i + 1] + boys[i:i + 1])
print(names) #['Аня', 'Петя', 'Катя', 'Вася', 'Маша', 'Света']

Офлайн

#2 Дек. 23, 2020 17:17:13

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Получить один список из двух других списков

 from itertools import zip_longest
print ([name for names in zip_longest(girls, boys) for name in names if name])
>>>
['Аня', 'Петя', 'Катя', 'Вася', 'Маша', 'Света']
>>> 



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Дек. 23, 2020 18:24:58

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1372
Репутация: +  122  -
Профиль   Отправить e-mail  

Получить один список из двух других списков

 girls = ['Аня', 'Катя', 'Маша', 'Света']
boys = ['Петя', 'Вася']
out = []
while girls or boys:
	if girls:
		out.append(girls.pop(0))
	if boys:
		out.append(boys.pop(0))
print(out) # ['Аня', 'Петя', 'Катя', 'Вася', 'Маша', 'Света']

Офлайн

#4 Дек. 24, 2020 00:47:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Получить один список из двух других списков

  
>>> import itertools
>>> 
>>> def f(seq1, seq2):
...     for e1, e2 in itertools.zip_longest(seq1, seq2):
...         if e2 is None:
...             yield e1
...         else:
...             yield e1
...             yield e2
... 
>>> girls = ['Аня', 'Катя', 'Маша', 'Света']
>>> boys = ['Петя', 'Вася']
>>> 
>>> list(f(girls, boys))
['Аня', 'Петя', 'Катя', 'Вася', 'Маша', 'Света']
>>>

  
>>> def f(lst1, lst2):
...     it1 = iter(lst1)
...     it2 = iter(lst2)
...     while True:
...         e1 = next(it1, None)
...         if e1 is None:
...             break
...         else:
...             yield e1
...         e2 = next(it2, None)
...         if e2 is not None:
...             yield e2
... 
>>> 
>>> girls = ['Аня', 'Катя', 'Маша', 'Света']
>>> boys = ['Петя', 'Вася']
>>> 
>>> list(f(girls, boys))
['Аня', 'Петя', 'Катя', 'Вася', 'Маша', 'Света']
>>>



Офлайн

#5 Дек. 24, 2020 06:04:02

DuffyDuck
Зарегистрирован: 2020-09-07
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Получить один список из двух других списков

PEHDOM
Спасибо!

Офлайн

#6 Дек. 24, 2020 06:04:17

DuffyDuck
Зарегистрирован: 2020-09-07
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Получить один список из двух других списков

xam1816
Спасибо!

Офлайн

#7 Дек. 24, 2020 06:04:31

DuffyDuck
Зарегистрирован: 2020-09-07
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Получить один список из двух других списков

py.user.next
Спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version