Python 删除包含多个条件的列表项
我将路径列表设置为字符串Python 删除包含多个条件的列表项,python,string,python-2.7,list,filepath,Python,String,Python 2.7,List,Filepath,我将路径列表设置为字符串 >>p=['/path/one/foo.txt'、'/path/two/foo.txt'、'/path/three/foo.txt'、'/path/four/foo.txt] 我知道我可以使用以下方法从列表中删除包含单词的条目 >>p=[x代表p中的x,如果“2”不在x中] >>p ['/path/one/foo.txt'、'/path/three/foo.txt'、'/path/four/foo.txt'] 然而,这似乎不起作用 >>p=[x代表p中的x,如果x中没有
>>p=['/path/one/foo.txt'、'/path/two/foo.txt'、'/path/three/foo.txt'、'/path/four/foo.txt
]
我知道我可以使用以下方法从列表中删除包含单词的条目
>>p=[x代表p中的x,如果“2”不在x中]
>>p
['/path/one/foo.txt'、'/path/three/foo.txt'、'/path/four/foo.txt']
然而,这似乎不起作用
>>p=[x代表p中的x,如果x中没有“二”或“三”]
>>p
['/path/one/foo.txt'、'/path/two/foo.txt'、'/path/three/foo.txt'、'/path/four/foo.txt
]`
如何删除p
中包含2个或3个的所有条目
注意,我正在从dict中的不同键中提取值2
和3
,因此创建单个列表可能并不简单。您可以将all
与生成器表达式一起使用:
values = ('two', 'three')
p = [x for x in p if all(i not in x for i in values)]
更好的方法是提取特定文件夹,并将其与集
进行比较。您的示例很简单,因为您只对第二个目录感兴趣:
values = {'two', 'three'}
L = ['/path/one/foo.txt', '/path/two/foo.txt',
'/path/three/foo.txt', '/path/four/foo.txt']
res = [i for i in L if i.split('/')[2] not in values]
print(res)
['/path/one/foo.txt', '/path/four/foo.txt']
您可以将all
与生成器表达式一起使用:
values = ('two', 'three')
p = [x for x in p if all(i not in x for i in values)]
更好的方法是提取特定文件夹,并将其与集
进行比较。您的示例很简单,因为您只对第二个目录感兴趣:
values = {'two', 'three'}
L = ['/path/one/foo.txt', '/path/two/foo.txt',
'/path/three/foo.txt', '/path/four/foo.txt']
res = [i for i in L if i.split('/')[2] not in values]
print(res)
['/path/one/foo.txt', '/path/four/foo.txt']
p=[x代表p中的x,如果x中没有“两个”和x中没有“三个”]
在Python中,有两个单独的布尔语句:'two'在x
中,和'three'在x
中。您使用的语法不起作用,因为Python无法将该语法识别为两个单独的布尔语句。p=[x表示p中的x,如果x中没有'two',x中没有'three]
在Python中,有两个单独的布尔语句:'two'在x
中,和'three'在x
中。您使用的语法不起作用,因为Python无法将该语法识别为两个单独的布尔语句。使用正则表达式。--><代码>重新搜索(r“(两个|三个)”,x)
演示:
import re
p = ['/path/one/foo.txt', '/path/two/foo.txt', '/path/three/foo.txt', '/path/four/foo.txt']
p = [x for x in p if not re.search(r"(two|three)", x)]
print(p)
['/path/one/foo.txt', '/path/four/foo.txt']
输出:
import re
p = ['/path/one/foo.txt', '/path/two/foo.txt', '/path/three/foo.txt', '/path/four/foo.txt']
p = [x for x in p if not re.search(r"(two|three)", x)]
print(p)
['/path/one/foo.txt', '/path/four/foo.txt']
使用正则表达式。--><代码>重新搜索(r“(两个|三个)”,x)
演示:
import re
p = ['/path/one/foo.txt', '/path/two/foo.txt', '/path/three/foo.txt', '/path/four/foo.txt']
p = [x for x in p if not re.search(r"(two|three)", x)]
print(p)
['/path/one/foo.txt', '/path/four/foo.txt']
输出:
import re
p = ['/path/one/foo.txt', '/path/two/foo.txt', '/path/three/foo.txt', '/path/four/foo.txt']
p = [x for x in p if not re.search(r"(two|three)", x)]
print(p)
['/path/one/foo.txt', '/path/four/foo.txt']
试试这个:
p = [x for x in p if 'two' not in x and 'three' not in x]
试试这个:
p = [x for x in p if 'two' not in x and 'three' not in x]
@afg1997,您也可以继续使用自己的方法,只需将或替换为和,并对代码稍作修改,如下所示
>>> p = ['/path/one/foo.txt', '/path/two/foo.txt', '/path/three/foo.txt', '/path/four/foo.txt']
>>>
>>> [x for x in p if not 'two' in x and not 'three' in x]
['/path/one/foo.txt', '/path/four/foo.txt']
>>>
@afg1997,您也可以继续使用自己的方法,只需将或替换为和,并对代码稍作修改,如下所示
>>> p = ['/path/one/foo.txt', '/path/two/foo.txt', '/path/three/foo.txt', '/path/four/foo.txt']
>>>
>>> [x for x in p if not 'two' in x and not 'three' in x]
['/path/one/foo.txt', '/path/four/foo.txt']
>>>
这很有帮助,但是根据Ayoub Laazazi
我认为我应该使用和而不是或是的,你是对的。我编辑了我的帖子来反映这一点。这很有帮助,但是根据Ayoub Laazazi
我认为我应该使用和而不是或是的,你是对的。我编辑了我的帖子来反映这一点。这似乎是票证,只是做一些测试。这似乎是票证,只是做一些测试