簡體   English   中英

如何使用python連接/合並兩個生成器輸出

[英]How to join/merge two generators output using python

我有兩台發電機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]


謝謝您的幫助。

第一種情況:使用

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

第二種情況:使用

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

您當然可以使用itertools.izip作為生成器版本。 如果在Python 3及更高版本中使用zip ,則會自動獲得生成器。

例如,您可以使用itertools.izip

g1=([s]*3 for s in string.ascii_lowercase)
g2=([s]*3 for s in string.ascii_uppercase)
g=itertools.izip(g1,g2)

這將確保結果也是發電機。

如果你喜歡在這里使用第二個是你如何做到這一點

g1=([s]*3 for s in string.ascii_lowercase)
g2=([s]*3 for s in string.ascii_uppercase)
g=(x+y for x,y in itertools.izip(g1,g2))

你可以使用zip(g1, g2)獲得成對的東西(你的第一個請求zip(g1, g2) 你可以通過[a + b for a, b in zip(g1, g2)]加入它們(你的第二個請求)。

幾乎等效,你可以使用map 使用map(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]。 這是兩種情況:

map(lambda x, y: (x[0], y[0]), g1, g2)
map(lambda x, y: x[0] + y[0], g1, g2)

假設你有g1g2

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])]

而對於第二個:

[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]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM