列表和字符串问题

2024-06-16 10:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想删除有问题的test\u数据列表元素,它包含坏的\u字符和固定的字符以附加到新的列表中,但脚本不起作用。你知道吗

以下代码:

        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

你能告诉我代码有什么问题吗?如何进行操作?你知道吗


Tags: 代码intest列表fordata字符bad
2条回答

在使用in bad \u 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)

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

相关问题 更多 >