Python 3.1.1元组问题

时间:2010-03-08 09:00:37

标签: python class tuples

这段代码应该通过一个列表并对项目执行一些格式化,例如删除引号,然后将其保存到另一个列表。

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

3 个答案:

答案 0 :(得分:2)

我认为您需要string_o = ""而不是string_o = ()

您的问题是您希望string_o成为字符串,以便可以在其上附加其他字符串。将其设置为()会使其成为元组,而这是一种与字符串不兼容的数据类型。

答案 1 :(得分:2)

除了上一个答案之外,还有更多的pythonic方式:

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

它简短易读。

答案 2 :(得分:1)

要添加Olivier的答案,我认为整个代码可以替换为:

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

仅使用python 2.x进行测试。