ループとif文のためのPythonソートデータ

data = ['cat', 'dog', 'None', 'Turtle', 'None']
new_data = []
for item in data:
    if item == 'None':
        new_data.append(data.index(item))
print new_data

>> [2,2]

このストアの新しいデータを [2,4] として取得するにはどうすればよいですか?これは私が欲しいものです。ありがとうございました!

3

4 答え

繰り返しながら enumerate() を使用してください。これにより、現在のアイテムとそのインデックスの両方が追跡されます。

[index for index, x in enumerate(data) if x == "None"]
6
追加された
for idx, item in enumerate(data):
    if item == 'None':
        new_data.append(idx)

より良いですが、ちょうどSvenの答えのようにリストの理解を使用してください

2
追加された

試してください:

In [1]: data = ['cat', 'dog', 'None', 'Turtle', 'None']

In [2]: [i for i,val in enumerate(data) if val == 'None']
Out[2]: [2, 4]
1
追加された

data.index(item)は、リスト内の最初に出現した位置だけを返します。 あなたは単にこれを行うことができます:

fまたはi in range(0,len(data)):
  if data[i] == 'None':
    new_data.append(i)

これはあなたに必要な出力を与えるはずです

または

スヴェンの答えをチェックする

1
追加された
@SvenMarnach:おっと、そうです。私はそれを二重にチェックしました。実際にルックアップはO(1)です。これについて私を真っ直ぐにしてくれてありがとう。
追加された 著者 Tim Pietzcker,
@aaronphalenそれは[2,4]を与えるべきです。それは私のためです。
追加された 著者 unni,
@aaronphalenわかりません。私はあなたがSvenの答えに行くべきだと思う。ティムが指摘したように、それ以上のPythonic
追加された 著者 unni,
なぜ私のpythonが唾を吐くのですか?
追加された 著者 phales15,
@unni私は同意するが、私のpythonが吐き出されているいくつかの奇妙な理由がある[2,2]。私は新しいシェルを開こうとしましたが、私は同じことをします。何が問題なの?
追加された 著者 phales15,