清单:计数和删除

时间:2013-03-27 22:35:22

标签: python python-3.x

给定一个列表,例如List = [“X”,“X”,“O”,“O”,“O”,“O”],我如何计算有多少“X”在列表中,然后从列表中减去那么多“O”。 List将始终将所有X放在第一位,将所有O放在最后。我以为我可以做点像......

List=["X","X","O","O",'O','O']
ListCount=List.count("X")
del List[-(List2):0]

我认为通过从-2:0删除O来产生[“X”,“X”,“O”,“O”],但绝对没有发生任何事情。在python中。

5 个答案:

答案 0 :(得分:3)

如我的评论中所述,另一种数据结构在这里可能更有用,因为您不关心订单:

data = {"X": 2, "O": 4}
data["O"] -= data["X"]

如果您需要实际列表,可以使用快速generator expression轻松创建:

from itertools import chain, repeat
data_list = list(chain.from_iterable(repeat(key, count) for key, count in data.items()))

或者,走另一条路:

from collections import Counter
data = Counter(data_list)

答案 1 :(得分:1)

索引零对应于列表中的第一项,因此您的切片List[-2:0]表示从下一个到最后一个到第一个之前。由于这将是一个空的范围,你不会从你的切片中得到任何东西(或者更确切地说,你的del语句不会删除任何东西)。

相反,省略切片的第二部分。 Python将自动切换到列表的末尾。

del List[-ListCount:]

答案 2 :(得分:0)

假设我理解你的问题,你的切片应该是这样的:

del List[-ListCount:]

答案 3 :(得分:0)

您的方式似乎有效 - 您不应该在示例中使用List2 bu ListCount。也许它不是太pythonic,它只会在你说的条件下工作,但它有效:)

>>> l = [1,1,1,2,2,2,2]
>>> del l[-l.count(1):]
>>> print l
[1, 1, 1, 2]

答案 4 :(得分:0)

怎么样:

List = ["X","X","O","O",'O','O']
xCount = List.count('X')
List = List[:-xCount]