2010-03-08 88 views
0

这段代码应该经过一个列表,并对项目执行一些格式化操作,例如删除引号,然后将其保存到另一个列表。Python 3.1.1与元组有关的问题

class process: 
    def rchr(string_i, asciivalue): 
     string_o =() 
     for i in range(len(string_i)): 
      if ord(string_i[i]) != asciivalue: 
       string_o += string_i[i] 
     return string_o 
    def flist(self, list_i): 
     cache =() 
     cache_list = [] 
     index = 0 
     for line in list_i: 
      cache = line.split('\t') 
      cache[0] = process.rchr(str(cache[0]), 34) 
      cache_list.append(cache[0]) 
      cache_list[index] = cache 
      index += 1 
     cache_list.sort() 
     return cache_list 

p = process() 
list1a = ['cow', 'dog', 'sheep'] 
list1 = p.flist(list1a) 
print (list1) 

但是;它扼流圈在string_o += string_i[i]并提供了以下错误:

Traceback (most recent call last): 
    File "/Projects/Python/safafa.py", line 23, in <module> 
    list1 = p.flist(list1a) 
    File "/Projects/Python/safafa.py", line 14, in flist 
    cacbe[0] = process.rchr(str(cache[0]), 34) 
    File "/Projects/Python/safafa.py", line 7, in rchr 
    string_o += string_i[i] 
TypeError: can only concatenate tuple (not "str") to tuple 
+0

你想rchr()结果是一个字符串或元组?它不能两个:) – 2010-03-08 09:24:53

回答

3

我想你想string_o = ""代替string_o =()

你的问题是,你想string_o是一个字符串,这样你就可以追加其他字符串到它。将其设置为()使其成为一个元组,而该元组是一种与字符串不兼容的数据类型。

+0

为什么“”使它工作和()不? – Pax 2010-03-08 09:07:58

+0

@Protean因为元组(,)不能被修改。列表[]可以。为什么有一个元组类型呢?因为元组可以用作字典_key_,因为它是不可变的(不可修改的),并且列表可以被修改,因此不能用作字典键。 – extraneon 2010-03-08 09:26:37

+0

@gabe不会string_o = [],并在结尾“”.join(string_o)更好?否则,Python一直在创建和放弃字符串。 – extraneon 2010-03-08 09:27:47

3

除了以前的答案,更Python的方式去将是:

string_o = ''.join(c for c in string_i if ord(c) != asciivalue) 

这是短期和可读性。

2

为了增加Olivier的答案,我想整个代码可以替换为:

import itertools 
output = [i.replace('"','') for i in list(itertools.chain(*(x.split('\t') for x in input)))] 

只蟒蛇2.x的测试。