Python如何从列表中删除元素而不改变其他元素的索引?

5
我有一个列表L = [a,a,b,b,c,c],现在我想删除第一个'b',使得L变成[a,a,b,c,c]。在新的L中,第一个'c'的索引是3。是否有任何方法可以从L中删除第一个'b',并仍然将第一个'c'的索引作为4返回?谢谢。

删除 b,插入 一些字符 - vks
2
不行,你不能这样做。索引是自动的。 - d-coder
2
如果你这样做了,你会希望从L[2]L[3]得到什么? - BrenBarn
1
你想要一个 dict 吗?此外,如果您经常打算删除列表开头附近的项目,则这是昂贵的 - YS-L
你可以维护列表的一个副本,并将其用于索引。 - NLPer
显示剩余2条评论
2个回答

2
无法完全删除一个元素并保留其他元素的索引,就像你的例子一样。元素的索引表示它们在列表中的位置。如果你有一个列表 [a, a, b, b, c, c],并且你删除第一个b,得到 [a, a, b, c, c],那么索引会调整,因为它们代表列表中元素的位置,在删除元素后发生了变化。
但是,根据你的用例,可以通过使用不同的数据结构来获得所需的行为。例如,你可以使用整数到对象的字典(列表中需要的任何对象) 。例如,原始列表可以表示为{0: a, 1: a, 2: b, 3: b, 4: c, 5: c}。如果你删除“索引”(而不是键)为2的b,则会得到{0: a, 1: a, 3: b, 4: c, 5: c},这似乎是你要寻找的行为。

是的,字典确实是一种选择,但我正在寻找一种只通过列表实现的方法。下面的pandas方法看起来很酷。 - Prot2014

1
也许你可以使用来达到预期效果:

>>> import pandas as pd
>>> L = ['a','a','b','b','c','c']
>>> df = pd.DataFrame(L)
>>> df
   0
0  a
1  a
2  b
3  b
4  c
5  c

[6 rows x 1 columns]
>>> df = df.drop(3)
>>> df
   0
0  a
1  a
2  b
4  c
5  c

[5 rows x 1 columns]
>>> df.loc[4]
0    c
Name: 4, dtype: object
>>> df.loc[5]
0    c
Name: 5, dtype: object

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接