python - for循环,如果元素不等于值,则替换为空字符串

标签 python string list replace equals

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

最佳答案

您误解了的工作原理:

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

关于python - for循环,如果元素不等于值,则替换为空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12557299/

相关文章:

python - 将 SVG 转换为 FontForge 的 SplineSet 格式

c# - 在 C# 中的字符串列表中查找字符串

c - 使用函数在c中填充并返回字符串数组

java - 为每个项目列出多个 TextView

java - 如何像 Python 负切片一样访问 java List 中的元素?

python - 如何将Python中的二维列表导出到excel?

python - Groupby()和 Pandas 中的聚合

python - 获取列表列表的第 i 个元素并创建这些第 i 个元素的列表的最编程优雅(pythonic)方式

c# - 使用 LINQ 从进程 [] 获取字符串 [] 或进程 ID

python - Zsh:未找到 Conda/Pip 安装命令