0

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

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

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

4

5 回答 5

3

正如我在评论中指出的那样,另一种数据结构在这里可能更有用,因为您不关心顺序:

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

如果您需要实际列表,可以使用快速生成器表达式轻松创建:

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)
于 2013-03-27T22:41:35.963 回答
1

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

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

del List[-ListCount:]
于 2013-03-27T22:39:28.043 回答
0

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

>>> l = [1,1,1,2,2,2,2]
>>> del l[-l.count(1):]
>>> print l
[1, 1, 1, 2]
于 2013-03-27T22:42:09.323 回答
0

假设我理解您的问题,您的切片应如下所示:

del List[-ListCount:]
于 2013-03-27T22:38:58.827 回答
0

怎么样:

List = ["X","X","O","O",'O','O']
xCount = List.count('X')
List = List[:-xCount]
于 2013-03-27T22:47:58.587 回答