13

私は2つのジェネレータg1とg2を持っています

for line in g1:
    print line[0]

[
a, a, a] [b, b, b]
[c, c, c]

for line1 in g2:
    print line1[0]

[1, 1, 1]
[2, 2, 2]
[3, 3, 3]

for line in itertools.chain(g1, g2):
    print line[0]

[
a、a、a] [b、b、b]
[c、c、c]
[ 1、1、1] [2、2、2
] [3、3、3
]


どのように

[ a, a, a]

,[1, 1, 1]
[b, b, b],[2, 2, 2]
[c, c, c],[3, 3, 3]

または

[a, a, a, 1, 1, 1]
[b, b, b, 2, 2, 2]
[c, c, c, 3, 3, 3]


ご協力ありがとうございました。

4

4 に答える 4

18

最初のケース: 使用

for x, y in zip(g1, g2):
    print(x[0], y[0])

2 番目のケース: 使用

for x, y in zip(g1, g2):
    print(x[0] + y[0])

itertools.izipもちろんジェネレーター版にも使えます。zipPython 3 以降で使用する場合、ジェネレーターは自動的に取得されます。

于 2011-12-18T17:20:20.980 に答える
3

g1あなたが持っているとしましょうg2

g1 = [
    [['a', 'a', 'a'], ['e', 'e'], ['f', 'g']],
    [['b', 'b', 'b'], ['e', 'e'], ['f', 'g']],
    [['c', 'c', 'c'], ['e', 'e'], ['f', 'g']],
]

g2 = [
    [[1, 1, 1], ['t', 'q'], ['h', 't']],
    [[2, 2, 2], ['r', 'a'], ['l', 'o']],
    [[3, 3, 3], ['x', 'w'], ['z', 'p']],
]

それを取得するには:

[a, a, a],[1, 1, 1]
[b, b, b],[2, 2, 2]
[c, c, c],[3, 3, 3]

出来るよ :

result1 = map(lambda a, b: (a[0], b[0]) , g1, g2)
# Which is like this :
[(['a', 'a', 'a'], [1, 1, 1]),
 (['b', 'b', 'b'], [2, 2, 2]),  
 (['c', 'c', 'c'], [3, 3, 3])]

そして2番目の場合:

[a, a, a, 1, 1, 1]
[b, b, b, 2, 2, 2]
[c, c, c, 3, 3, 3]

result2 = map(lambda a, b: a[0]+b[0] , g1, g2)
# Which is like that :
[['a', 'a', 'a', 1, 1, 1],
 ['b', 'b', 'b', 2, 2, 2],
 ['c', 'c', 'c', 3, 3, 3]]
于 2011-12-18T17:43:52.017 に答える
3

を使用して、もののペア (最初の要求) を取得できますzip(g1, g2)。を実行することで、それらに参加できます (2 番目の要求) [a + b for a, b in zip(g1, g2)]

ほぼ同等に、使用できますmapmap(None, g1, g2)ペアのリストを生成し、map(lambda x, y: x + y, g1, g2)ペアを結合するために使用します。

あなたの例では、ジェネレーターは毎回リストまたはタプルを生成していますが、そのうちの最初の要素のみに関心があります。必要なものを生成するか、圧縮またはマッピングする前に前処理します。例えば:

g1 = (g[0] for g in g1)
g2 = (g[0] for g in g2)

または、マップに [0] を適用することもできます。次の 2 つのケースがあります。

map(lambda x, y: (x[0], y[0]), g1, g2)
map(lambda x, y: x[0] + y[0], g1, g2)
于 2011-12-18T17:21:15.467 に答える