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

インデックス 0 はリストの最初の項目に対応するため、スライスList[-2:0]は最後から次の項目から最初の項目の直前まで移動するように指定します。それは空の範囲になるため、スライスから何も取得しません (または、delステートメントは何も削除しません)。

代わりに、スライスの 2 番目の部分を省略します。Python は自動的にリストの最後までスライスします。

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

どうですか:

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

あなたの質問を理解していると仮定すると、スライスは次のようになります。

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

あなたのやり方はうまくいくようです - あなたの例では List2 bu ListCount を使うべきではありません。多分それはあまりにもpythonicではなく、あなたが述べた条件内でのみ機能しますが、機能します:)

>>> 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 に答える