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”作为变量名。