Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除包含多个条件的列表项_Python_String_Python 2.7_List_Filepath - Fatal编程技术网

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
我认为我应该使用
而不是
是的,你是对的。我编辑了我的帖子来反映这一点。这似乎是票证,只是做一些测试。这似乎是票证,只是做一些测试