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

3 回答 3

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']
于 2012-10-27T07:48:26.437 回答
2

用于re.sub将所有不是a, b, 或c, 即 ,的内容[^abc]替换为空字符串:

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

演示

于 2012-09-24T00:02:14.193 回答
0
  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]
于 2012-10-27T07:22:21.577 回答