Список и строка выдачи - PullRequest
       49

Список и строка выдачи

0 голосов
/ 29 сентября 2019

Я хочу удалить проблемные элементы списка test_data, которые содержат bad_characters и фиксированные символы для добавления в новый список stripped_test_data, но скрипт не работает.

Следующий код:

        test_data = ["1912", "1929", "1913-1923",
                 "(1951)", "1994", "1934",
                 "c. 1915", "1995", "c. 1912",
                 "(1988)", "2002", "1957-1959",
                 "c. 1955.", "c. 1970's", 
                 "C. 1990-1999"]

    bad_chars = ["(",")","c","C",".","s","'", " "]

    def strip_characters(data):
        stripped_test_data = []
        for each in data:
            if bad_chars in each:
                tostr = str(each)
                adjusted = tostr.replace(bad_chars, "")
                stripped_test_data.append(tostr)
            else:
                adjusted = each
                stripped_test_data.append(each)
        return stripped_test_data

adjsuted_data = strip_characters(test_data)

когда run выдает ошибку:

> > TypeErrorTraceback (most recent call last) <ipython-input-1-d9d5a3a4542a> in <module>()
>      20     return stripped_test_data
>      21 
> ---> 22 adjsuted_data = strip_characters(test_data)
>      23 
>      24 
> 
> <ipython-input-1-d9d5a3a4542a> in strip_characters(data)
>      11     stripped_test_data = []
>      12     for each in data:
> ---> 13         if bad_chars in each:
>      14             tostr = str(each)
>      15             adjusted = tostr.replace(bad_chars, "")

TypeError: 'in <string>' requires string as left operand, not list

Подскажите, пожалуйста, что не так с кодом и как выполнить операцию?

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

str.strip может обрабатывать несколько символов:

bad_chars_joined = ''.join(bad_chars)
[t.strip(bad_chars_joined) for t in test_data]

Вывод:

['1912',
 '1929',
 '1913-1923',
 '1951',
 '1994',
 '1934',
 '1915',
 '1995',
 '1912',
 '1988',
 '2002',
 '1957-1959',
 '1955',
 '1970',
 '1990-1999']
0 голосов
/ 29 сентября 2019

ваш код пытается сравнить весь список плохих символов при использовании в bad_chars попробуйте это:

test_data = ["1912", "1929", "1913-1923",
                 "(1951)", "1994", "1934",
                 "c. 1915", "1995", "c. 1912",
                 "(1988)", "2002", "1957-1959",
                 "c. 1955.", "c. 1970's", 
                 "C. 1990-1999"]

bad_chars = ["(",")","c","C",".","s","'", " "]

def strip_characters(data):
    stripped_test_data = []
    for char in bad_chars:
        for each in data:
            if char in each:
                tostr = str(each)
                adjusted = tostr.replace(char, "")
                stripped_test_data.append(adjusted)
            else:
                stripped_test_data.append(each)
    return stripped_test_data

adjsuted_data = strip_characters(test_data)
...