Python 3.1.1 Проблема с кортежами - PullRequest
0 голосов
/ 08 марта 2010

Предполагается, что этот фрагмент кода проходит через список и предварительно форматирует элементы, например удаляет цитаты, а затем сохраняет его в другом списке.

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 ]

2 голосов
/ 08 марта 2010

В дополнение к предыдущему ответу, более питонический путь будет:

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

Он короткий и читаемый.

2 голосов
/ 08 марта 2010

Я думаю, что вы хотите string_o = "" вместо string_o = ()

Ваша проблема в том, что вы хотите, чтобы string_o была строкой, чтобы вы могли добавлять к ней другие строки. Установка этого значения равным () делает его кортежем, что является типом данных, несовместимым со строкой.

1 голос
/ 08 марта 2010

Чтобы добавить к ответу Оливье, я думаю, весь код можно заменить на:

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

Проверено только на python 2.x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...