Как я могу вычислить элементы из двух разных списков в Python? - PullRequest
2 голосов
/ 12 мая 2011

У меня есть два списка целых, и я хочу систематически управлять своими объектами.Например, у меня есть:

A = [ a1, a2, a3, a4 ...]
B = [ b1, b2, b3 ...]

и я хочу напечатать примерно так:

a1+b1   a2
a2+b2   a3
a3+b3   a4

Я думаю, что есть " для цикла ", но я не знаю, как использовать две переменные в" для цикла ".

Ответы [ 6 ]

3 голосов
/ 12 мая 2011

Вы можете использовать zip:

>>> A = ['a1', 'a2', 'a3', 'a4']
>>> B = ['b1', 'b2', 'b3']
>>> zip(A[:3], B, A[1:])
[('a1', 'b1', 'a2'), ('a2', 'b2', 'a3'), ('a3', 'b3', 'a4')]
>>> for a, b, c in zip(A[:3], B, A[1:]):
...     print a + '+' + b + '   ' + c
... 
a1+b1   a2
a2+b2   a3
a3+b3   a4
2 голосов
/ 12 мая 2011

С рецептом pairwise от itertools:

from itertools import tee, izip

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

a = [1,2,3,4]
b = [7,8,9]

for (a1, a2), b1 in izip(pairwise(a), b):
    print a1 + b1, a2
2 голосов
/ 12 мая 2011

Вы ищете что-то простое, как это:

In []: A= [1, 2, 3, 4]
In []: B= [1, 2, 3]
In []: for k, b in enumerate(B):
   ..:     print A[k]+ b, A[k+ 1]
   ..:
2 2
4 3
6 4

Или, может быть, что-то вроде этого:

In []: for k, b in enumerate(B):
   ..:     print '{}+{}\t{}'.format(A[k], b, A[k+ 1])
   ..:
1+1     2
2+2     3
3+3     4
1 голос
/ 12 мая 2011

Этот

l = zip(map(sum, zip(A, B)), A[1:])

выдаст список кортежей

[(a_1 + b_1, a_2), (a_2 + b_2, a_2), ..., (a_(i-1) + b_(i-1), a_i)]

Чтобы напечатать его,

for a, b in l:
    print a, b
1 голос
/ 12 мая 2011
[(a + b, c) for (a, b, c) in zip(A, B, A[1:])]

все, что А и В содержат

1 голос
/ 12 мая 2011
for i,b in enumerate(B):
    print(A[i] + '+' + b + '\t' + A[i+1])
...