2013-11-05 27 views
1

我试图将我定义的集合转换为列表,以便我可以将其用于索引。从集合转换时的空列表

seen = set() 
for line in p: 
    for word in line.split(): 
     if word not in seen and not word.isdigit(): 
      seen.add(word)   
been = list(seen) 

该集似乎包含项目就好了。但是,当我在变量资源管理器中监视其值时(以及后来调用索引函数时),该列表总是空的。

我在做什么错?

编辑:这是整个代码。我试图在'o'中的'p'中找到单词的位置,并将其出现次数记录在一行中。这是一个巨大的单词列表,因此手动输入任何内容都是不可能的。

p = open("p.txt", 'r') 
o = open("o.txt", 'r') 
t = open("t.txt", 'w') 
lines = p.readlines() 
vlines = o.readlines() 
seen = set() 
for line in p: 
    for word in line.split(): 
     if word not in seen and not word.isdigit(): 
      seen.add(word)   
been = list(seen) 
for i in lines: 
     thisline = i.split(); 
     thisline[:] = [word for word in thisline if not word.isdigit()] 
     count = len(thisline) 
     j = [] 
     j.append(count) 
     for sword in thisline: 
      num = thisline.count(sword) 
      #index=0 
      #for m in vlines: 
       #if word is not m: 
       #index+=1 
      ix = been.index(sword) 
      j.append(' ' + str(ix) + ':' + str(num)) 
     j.append('\n') 
for item in j: 
    t.write("%s" % item) 

输出格式应该是'(行中项目总数)(index):(出现次数)'。 我觉得我非常接近,但这部分正在窃听我。

+0

'been'应该是项目的列表在'看到'没有任何问题。您是否有缩进问题? – sberry

+0

另外,只要尝试添加到集合中,即使它已经存在,在计算上也是非常便宜的,所以如果您愿意,您可以*删除“未见过的单词”和“如果”的一部分。 – sberry

回答

2

你的代码工作得很好。

seen = set() 
for line in p: 
    for word in line.split(): 
     if word not in seen and not word.isdigit(): 
      seen.add(word)   
been = list(seen) 

有:

>>> p = ''' 
the 123 dogs 
chased 567 cats 
through 89 streets'''.splitlines() 
>>> seen = set() 
>>> for line in p: 
     for word in line.split(): 
      if word not in seen and not word.isdigit(): 
       seen.add(word) 


>>> been = list(seen) 
>>> 
>>> seen 
set(['streets', 'chased', 'cats', 'through', 'the', 'dogs']) 
>>> been 
['streets', 'chased', 'cats', 'through', 'the', 'dogs'] 
+0

这算作答案吗?! :P –

+0

在上面显示的整个代码中,尽管列表似乎是空的...... – user2951046

+0

@ user2951046该列表直到最后一行,“been = list(set)”才存在。那时,它被创建并且是非空的。如果您想跟踪代码,请查看* set *而不是列表。您可以在for循环的迭代之间看到set * see *增长。 –

0

除非有就是为什么你要读一行行的理由,你可以简单地替换此

been = list(set([w for w in open('p.txt', 'r').read().split() if not w.isdigit()])) 
相关问题