Найти - Пользователи
Полная версия: Вопросик про списки и циклы
Начало » Python для новичков » Вопросик про списки и циклы
1 2
NN
Совсем недавно начал разбираться в python, поэтому не судите строго.
К примеру есть два списка:
a=[u'каждый', u'охотник', u'желает', u'знать', u'где', u'сидит', u'фазан']
b=[u'красный', u'оранжевый', u'желтый', u'зеленый', u'голубой', u'синий', u'фиолетовый']
Через for получаем такой вывод:
for i in range(len(a)):
print a[i], c[i]
...
каждый красный
охотник оранжевый
желает желтый
знать зеленый
где голубой
сидит синий
фазан фиолетовый
А как изменить for или пойти другим путем, чтобы получить такие варианты:
1)                          2)
каждый красный каждый красный
оранжевый охотник
желтый желает
зеленый знать
голубой где
синий сидит
фиолетовый фазан
guranvir
C 1 вариантом можно пойти через двойной цикл.второй цикл можно оформить как:
for i in a:
print i,
for j in b:
print j
NN
Подскажите, а есть метод подобный extend(t), который не добавляет, а перемещает
последовательность в конец списка, подобно такой конструкции:
>>> l=[1,2,3,4,5,6]
>>>l
[1, 2, 3, 4, 5, 6]
>>> l.extend(l[0:3])
>>> del l[0:3]
>>> l
[4, 5, 6, 1, 2, 3]
regall
NN, можете использовать срез:
>>> l=[1,2,3,4,5,6]
>>> l
[1, 2, 3, 4, 5, 6]
>>> new_l = l[3:] + l[:3]
>>> new_l
[4, 5, 6, 1, 2, 3]
>>>
bgalina
как сложить элементы последовательностей разной длины ? например чтобы получилось
py.user.next
>>> def f(la, lb):
... shortest, longest = la, lb
... if shortest > lb:
... shortest, longest = longest, shortest
... return [i + j for i, j in zip(shortest + [0] * (len(longest) - len(shortest)), longest)]
...
>>> la, lb
([1], [5, 4, 6])
>>> f(la, lb)
[6, 4, 6]
>>> f(lb, la)
[6, 4, 6]
>>> f([1, 2, 3], [1, 2, 3])
[2, 4, 6]
>>>
bgalina
спасибо:)
bgalina
return [i + j for i, j in zip(shortest + * (len(longest) - len(shortest)), longest)]
можете эту строчку поподробнее объяснить…i+j for i,j in zip(промежуток понятности:),longest*зачем вот это последнее лонгест?*)
Ed
py.user.next
>>> def f(la, lb):
У вас ошибка в коде. Списки так не сравниваются по длине.
Вот вам демонстрация:
>>> f([1,2,3], [4,5])
[5, 7]
>>> map(lambda x,y: (x or 0) + (y or 0), [1,2,3], [4,5])
[5, 7, 3]
py.user.next
thanks, Ed

def f(la, lb):
shortest, longest = la, lb
if len(shortest) > len(longest):
shortest, longest = longest, shortest
return [i + j for i, j in zip(shortest + [0] * (len(longest) - len(shortest)), longest)]
>>> map(lambda x,y: (x or 0) + (y or 0), [1,2,3], [4,5])
<map object at 0xb6ffe94c>
>>> list(map(lambda x,y: (x or 0) + (y or 0), [1,2,3], [4,5]))
[5, 7]
>>>
а на втором питоне вроде работает

bgalina
return [i + j for i, j in zip(shortest + * (len(longest) - len(shortest)), longest)]
можете эту строчку поподробнее объяснить…i+j for i,j in zip(промежуток понятностиsmile,longest*зачем вот это последнее лонгест?*)
последняя longest - это второй аргумент zip
то есть это что-то вроде такого zip(shortest_extended, longest)
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