首页 > 解决方案 > 列表和字符串问题

问题描述

我想删除有问题的 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)

运行时抛出错误:

> > 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

你能帮忙看看代码有什么问题以及如何进行操作吗?

标签: pythonstringlistloopsdata-science

解决方案


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']

推荐阅读