【问题标题】:List and string issue列表和字符串问题
【发布时间】:2019-09-29 09:00:42
【问题描述】:

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

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

【问题讨论】:

标签: python string list loops data-science


【解决方案1】:

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

【讨论】:

【解决方案2】:

您的代码在使用 in 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)

【讨论】:

  • 代码有效,先生,但不会删除所有需要的字符。例如,循环删除列表中的第一个坏符号,但随后(调整后)它移动到其他元素。我需要删除所有坏字符,并且只删除一个坏字符后,不要让脚本切换到其他元素。
猜你喜欢
  • 1970-01-01
  • 2013-02-12
  • 2018-10-08
  • 2010-11-26
  • 2023-02-14
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 2014-04-18
相关资源
最近更新 更多