Python 如何在没有循环的情况下从列表中删除两个元素?

Python 如何在没有循环的情况下从列表中删除两个元素?,python,list,Python,List,我有一张单子 A = [A, B, #, C] 使用a.remove('#')我可以删除hashtag,但是考虑到我不知道hashtag之前的元素是什么,我如何在没有循环的情况下删除hashtag和元素呢?使用list.index查找hashtag的位置,然后使用两个片段删除这两个元素 pos = A.index('#') A = A[:pos - 1] + A[pos + 1:] A[:pos-1]提供了所有内容,但不包括hashtag前面的元素A[pos+1:://code>给出了has

我有一张单子

A = [A, B, #, C]

使用
a.remove('#')
我可以删除hashtag,但是考虑到我不知道hashtag之前的元素是什么,我如何在没有循环的情况下删除hashtag和元素呢?

使用
list.index
查找hashtag的位置,然后使用两个片段删除这两个元素

pos = A.index('#')
A = A[:pos - 1] + A[pos + 1:]
A[:pos-1]
提供了所有内容,但不包括hashtag前面的元素
A[pos+1:://code>给出了hashtag后面的所有内容,然后您可以将这两个内容合并到一个列表中

或者参考注释中的@usr2564301解决方案,该解决方案将其移除到位(无需重新分配):
A[pos-1:pos+1]=[]
,使用上面相同的
pos


注意:这假设hashtag不是列表中的第一个元素,否则会发生意外行为(请参阅下面的@sertsedat注释)

使用
list.index
查找hashtag的位置,然后使用两个片段删除这两个元素

pos = A.index('#')
A = A[:pos - 1] + A[pos + 1:]
A[:pos-1]
提供了所有内容,但不包括hashtag前面的元素
A[pos+1:://code>给出了hashtag后面的所有内容,然后您可以将这两个内容合并到一个列表中

或者参考注释中的@usr2564301解决方案,该解决方案将其移除到位(无需重新分配):
A[pos-1:pos+1]=[]
,使用上面相同的
pos


注意:这假设hashtag不是列表中的第一个元素,否则会发生意外行为(请参阅下面@sertsedat的注释)

您基本上需要知道hashtag的索引

A = ['A', 'B', '#', 'C']
hashtag_index = A.index('#')
# here I am removing the hashtag
A.pop(hashtag_index)
# here the element before
if hashtag_index != 0:
    A.pop(hashtag_index - 1)

print(A)
# ['A', 'C']

也可以在一行中使用del(当index==0时不起作用)


您基本上需要知道hashtag的索引

A = ['A', 'B', '#', 'C']
hashtag_index = A.index('#')
# here I am removing the hashtag
A.pop(hashtag_index)
# here the element before
if hashtag_index != 0:
    A.pop(hashtag_index - 1)

print(A)
# ['A', 'C']

也可以在一行中使用del(当index==0时不起作用)

一种方法是:

A = ['A', 'B', '#', 'C']

print(A) #output = ['A', 'B', '#', 'C']

index = A.index("#")
A.pop(index)
A.pop(index-1)

print(A) #output = ['A', 'C']
一种方法是:

A = ['A', 'B', '#', 'C']

print(A) #output = ['A', 'B', '#', 'C']

index = A.index("#")
A.pop(index)
A.pop(index-1)

print(A) #output = ['A', 'C']

如果您确定元素在列表中,则可以使用
index
获取列表中的位置,然后使用两个
pop
来删除项目(假设hashtag是列表中的第一个,那么您只需要删除它):

如果不确定该元素是否在列表中,则应首先检查它是否在列表中,以避免出现
ValueError

a= ['A', 'B', '#', 'C']
if '#' in a:
    index = a.index('#')   
    a.pop(index)
    if index > 0:
        a.pop(index-1)

print(a)

# output
['A', 'C']

如果您确定元素在列表中,则可以使用
index
获取列表中的位置,然后使用两个
pop
来删除项目(假设hashtag是列表中的第一个,那么您只需要删除它):

如果不确定该元素是否在列表中,则应首先检查它是否在列表中,以避免出现
ValueError

a= ['A', 'B', '#', 'C']
if '#' in a:
    index = a.index('#')   
    a.pop(index)
    if index > 0:
        a.pop(index-1)

print(a)

# output
['A', 'C']

不会发生索引超出范围错误。但是结果将是
['#','A','B','A','B','C']
@sertsedat啊,你是对的,我忘了-1指的是最后一个元素非常有趣的是一个小小的边缘案例会给我们带来什么样的头痛。那么
A[pos-1:pos+1]=[]
呢?这将修改现有的列表。(当
pos=0
时,它不会工作,但这与OP的要求”和“无论如何”之前的元素相矛盾。)@usr2564301 nice,没有想到这一点!不会发生索引超出范围错误。但是结果将是
['#','A','B','A','B','C']
@sertsedat啊,你是对的,我忘了-1指的是最后一个元素非常有趣的是一个小小的边缘案例会给我们带来什么样的头痛。那么
A[pos-1:pos+1]=[]
呢?这将修改现有的列表。(当
pos=0
时,它不会工作,但这与OP的要求”和“无论如何”之前的元素相矛盾。)@usr2564301 nice,没有想到这一点!