Найти - Пользователи
Полная версия: Получить один список из двух других списков
Начало » Python для новичков » Получить один список из двух других списков
1
DuffyDuck
Здравствуйте, хотел бы из таких двух списков:
 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) #['Аня', 'Петя', 'Катя', 'Вася', 'Маша', 'Света']
PEHDOM
 from itertools import zip_longest
print ([name for names in zip_longest(girls, boys) for name in names if name])
>>>
['Аня', 'Петя', 'Катя', 'Вася', 'Маша', 'Света']
>>> 
xam1816
 girls = ['Аня', 'Катя', 'Маша', 'Света']
boys = ['Петя', 'Вася']
out = []
while girls or boys:
	if girls:
		out.append(girls.pop(0))
	if boys:
		out.append(boys.pop(0))
print(out) # ['Аня', 'Петя', 'Катя', 'Вася', 'Маша', 'Света']
py.user.next
  
>>> 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))
['Аня', 'Петя', 'Катя', 'Вася', 'Маша', 'Света']
>>>
DuffyDuck
PEHDOM
Спасибо!
DuffyDuck
xam1816
Спасибо!
DuffyDuck
py.user.next
Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB