本文介绍了Python生成器行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

import itertools
ws=[]
subs=[]
set_subs=[]
for i in xrange(int(raw_input())):
    S=raw_input()
    l=len(S)
    subs.append(S[i:j+1] for i in xrange(l) for j in xrange(i,l))

输入:

2
aab
aac

现在 subs [0] subs [1] 给我相同的结果。

now both subs[0] and subs[1] give me same result.

print list(subs[0])
>>>['a','aa','aac','a','ac','c']
print list(subs[1])
>>>['a','aa','aac','a','ac','c']

list(subs [0]) 应该是 ['a','aa','aab','a','ab','b']

我模糊地理解为什么会这样。我该怎么做才能使 subs [0] subs [1] 实际上不同。

I vaguely understand why this is happening. What do I do to make subs[0] and subs[1] actually different.

注意:更改行

subs.append(S[i:j+1] for i in xrange(l) for j in xrange(i,l))

with

subs.append([S[i:j+1] for i in xrange(l) for j in xrange(i,l)])

不是一个选项

推荐答案

执行生成器时会评估S [i:j + 1] ,此时 S 具有最新值。

您可以使用普通发电机代替。现在 ss 是本地的 subgen

You can use a normal generator instead. Now ss is local to subgen:

import itertools

def subgen(ss):
    l=len(ss)
    for i in xrange(l):
        for j in xrange(i,l):
            yield ss[i:j+1]

subs=[]
for i in xrange(int(raw_input())):
    S=raw_input()
    subs.append(subgen(S))

这篇关于Python生成器行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-14 09:41