基于字符串模式的列表元素最佳删除方法

4

我有一个表格(嵌套列表)。以下是一个示例输出:

table = ['dd03', 'ff0000', 'a30b32', '000000', '234fas', '00ffff', 'ffffff', '0000ff', '0200ff']

我想删除列表中所有包含任何'ff'组合或元素中至少有2/6个字符是该字符的元素。 我已经用列表推导式完成了此工作,但显然效率不高,肯定可以用更少的代码实现。
    table = [[part for part in my_list if part != 'ffffff'] for my_list in table]
    table = [[part for part in my_list if part != 'ffff00'] for my_list in table]
    table = [[part for part in my_list if part != 'ff0000'] for my_list in table]
    table = [[part for part in my_list if part != '0000ff'] for my_list in table]
    table = [[part for part in my_list if part != '00ffff'] for my_list in table]
    table = [[part for part in my_list if part != 'ffff'] for my_list in table]
    table = [[part for part in my_list if part != 'ff'] for my_list in table]
    table = [[part for part in my_list if part != 'ffff02'] for my_list in table]
    table = [[part for part in my_list if part != '0200ff'] for my_list in table]

我想也许可以设置一个正则表达式变量来查找并删除匹配的元素...但是我对这个包不太熟悉,并且在这种情况下实现它。任何指导都将不胜感激。祝好。

将“if”条件更改为:“如果part中不包含'ff'”。 - Nir Alfasi
3
可以请问您更清楚地解释一下2/6条件是什么吗?为什么不能只数每个字符串中 f 出现的次数呢? - pzp
3
“f34fas”算有2/6个“f”吗? - Ma0
到目前为止,所有的答案都是错误的。在提问者澄清问题之前,没有人应该回答。猜测提问者意图的答案只会在问题得到明确说明和回答时产生噪音。 - pzp
4个回答

9
一个简单的包含检查应该就可以了:
[item for item in table if 'ff' not in item]

“至少2/6”这个条件有些多余(长度是固定的6),只需检查item是否不含有“ff”即可。

OP可能是指根据2/6规则,'f'可能不会在一起。 - Ma0
@Ev.Kounis 我怀疑这一点,仔细看看他们的代码就会发现他们是在一起的。 - Moses Koledoye
如果有什么问题,那么 ff 条件是多余的。而且长度不是固定的。 - pzp

2

您可以像这样获取没有ff的元素:

In [29]: print [i for i in table if 'ff' not in i]
['dd03', 'a30b32', '000000', '234fas']

2

试试这个:

table = ['dd03', 'ff0000', 'a30b32', '000000', '234fas', '00ffff', 'ffffff', '0000ff', '0200ff']
filtered_table = [item for item in table if item.count('f') < 2]

由于不是所有字符串的长度都相同,仅检查是否有两个或更多的“f”是不够的。 - pzp
@pzp 你的意思是它应该是 if item.count('f') / len(item) < 1/3 吗? - Ma0
1
@Ev.Kounis 是的,尽管它应该是 if len(item) > 3 * item.count('f'),以避免浮点除法问题。 - pzp

0
你可以遍历列表中的元素,并弹出包含子字符串的元素:
for item in list_of_items:
    if "ff" in item:
        list_of_items.pop(list_of_items.index(item))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接