Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List - Fatal编程技术网

Python 从列表中删除前面有特定元素的元素

Python 从列表中删除前面有特定元素的元素,python,list,Python,List,假设我们有一个列表[Y,X,4,Y,3,X,2,X] 我希望能够删除前面紧跟着一个X的所有元素,同时删除X本身。因此,结果应该类似于[Y,Y,3]。什么是蟒蛇式的方法 list = [Y, X, 4, Y, 3, X, 2, X] is_preceded = False result = [] for i in list: if i == 'X': is_preceded = True elif is_preceded == True: is_

假设我们有一个列表
[Y,X,4,Y,3,X,2,X]

我希望能够删除前面紧跟着一个X的所有元素,同时删除X本身。因此,结果应该类似于
[Y,Y,3]
。什么是蟒蛇式的方法

list = [Y, X, 4, Y, 3, X, 2, X]
is_preceded = False
result = []
for i in list:
    if i == 'X':
         is_preceded = True
    elif is_preceded == True:
         is_preceded = False
    else:
         result.append(i)
我想出了下面这样的东西,但我觉得它很笨重而且不干净。有更好的方法吗

list = [Y, X, 4, Y, 3, X, 2, X]
is_preceded = False
result = []
for i in list:
    if i == 'X':
         is_preceded = True
    elif is_preceded == True:
         is_preceded = False
    else:
         result.append(i)
使用和:

顺便说一句,不要将
list
用作变量naem。它隐藏内置类型/功能


如果使用Python2.x,
zip
将返回一个新列表。如果不需要,请使用
itertools.izip

除此之外,如果您不想创建临时列表(
[']+lst
),您还可以使用
itertools.chain(['],lst)
和:

顺便说一句,不要将
list
用作变量naem。它隐藏内置类型/功能


如果使用Python2.x,
zip
将返回一个新列表。如果不需要,请使用
itertools.izip


除此之外,如果您不想创建临时列表(
[']+lst
),您可以使用
itertools.chain(['],lst)
,,我建议使用列表理解向后处理列表,如下所示

l = ['Y', 'X', 4, 'Y', 3, 'X', 2, 'X']
rs = [l[i] for i in range(len(l) - 1, 0, -1) if l[i - 1] != 'X' and l[i] != 'X']

if l[0] != 'X':
    rs.append(l[0])

print rs[::-1]
# ['Y', 'Y', 3]

我建议使用列表理解向后处理列表,如下所示

l = ['Y', 'X', 4, 'Y', 3, 'X', 2, 'X']
rs = [l[i] for i in range(len(l) - 1, 0, -1) if l[i - 1] != 'X' and l[i] != 'X']

if l[0] != 'X':
    rs.append(l[0])

print rs[::-1]
# ['Y', 'Y', 3]

很好,拉链的想法非常聪明!另外,谢谢你提醒我不要使用“list”作为变量名。很好,zip的想法非常聪明!另外,感谢大家提醒不要使用“list”作为变量名。