【问题标题】:For loop, if element does not equal value, replace with empty stringFor循环,如果元素不等于值,则替换为空字符串
【发布时间】:2012-09-15 10:57:13
【问题描述】:
my_list = ['1 ab ac bbba','23 abcba a aabb ab','345 ccc ab aaaaa']

我试图去掉数字和空格,基本上所有不是“a”、“b”或“c”的东西

我试过了,但没用,我不知道为什么:

for str in my_list:
    for i in str:
        if i != 'a' or 'b' or 'c':
            i = ''
        else:
            pass

我想最终得到:

my_list2 = ['abacbbba','abcbaaaabbab','cccabaaaaa']

【问题讨论】:

    标签: python string list replace equals


    【解决方案1】:

    使用re.sub 将不是abc(即[^abc])的所有内容替换为空字符串:

    import re
    my_list2 = []
    for str in my_list:
        my_list2.append(re.sub("[^abc]", "", str))
    

    DEMO.

    【讨论】:

      【解决方案2】:
        m = ['1 ab ac bbba','23 abcba a aabb ab','345 ccc ab aaaaa']
        n=[m[x][m[x].index(" "):] for x in range(len(m))]
        n=[x.replace(" ","") for x in n]
      

      【讨论】:

        【解决方案3】:

        您误解了or 的工作原理:

        if i != 'a' or 'b' or 'c':
        

        等价于

        if (i != 'a') or ('b') or ('c'):
        

        因此将始终为True(因为b 的计算结果为True)。

        你可能打算写

        if i != 'a' and i != 'b' and i != 'c':
        

        也可以写成

        if i not in ('a', 'b', 'c'):
        

        甚至(因为字符串可以遍历其字符)

        if i not in 'abc':
        

        但即便如此,您也没有对这些信息做任何事情;字符串是不可变的,通过将'' 分配给i,您根本不会更改字符串。所以如果你想在没有正则表达式的情况下这样做,正确的方法是

        >>> my_list = ['1 ab ac bbba','23 abcba a aabb ab','345 ccc ab aaaaa']
        >>> new_list = [''.join(c for c in s if c in 'abc') for s in my_list]
        >>> new_list
        ['abacbbba', 'abcbaaaabbab', 'cccabaaaaa']
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-10-01
          • 2016-04-09
          • 2017-04-07
          • 1970-01-01
          • 1970-01-01
          • 2012-04-28
          • 2015-04-25
          相关资源
          最近更新 更多