5

さて、これは実際には2つの質問です。まず、リストのインデックスが存在するかどうかをテストする方法があるかどうかを知りたいです。たとえば、のようなコードを使用して、特定の条件が真になるたびにlist [i]をインクリメントしたいのですlist[i] += 1が、インデックスが存在しない場合、エラーが発生します。そこで、エラーが発生した場合に、のようなテストを設定したいと思いlist.append(1)ます。どのコードがそのようなテスト条件を達成できますか?If list[i]エラーをスローします。

フォローアップの質問として、テストが確立されたら、前述の追加メソッドを使用する以外にリストインデックスを作成する方法はありますか?

4

4 に答える 4

8

あなたが本当に欲しいのはdefaultdictリストではなく、整数をあなたが見た回数のある種のカウントにマッピングすることです。

(これは、以前に使用したことがある場合、perl の autovivificaiton の概念に非常に近いものです)

このコードは機能します:

from collections import defaultdict

# don't name a variable 'list'; you'll end up hiding the actual list type
my_List = defaultdict(int) # create a mapping, elements will default to 0

次に、使用できます

my_list[i] += 1

任意の値に対してi。以前に見られた場合は、それを増やします。そうでない場合は、my_list[i]デフォルト値の 0 が取得され、すぐに 1 にインクリメントされます。

于 2012-09-22T04:18:59.953 に答える
7

インデックスが存在するかどうかをテストします。

if 0 <= i < len(list): ... do something with list[i] ...
else: ... i is out of bounds, do something else ...

dictこの状況では、おそらく配列の代わりにa を使用したほうがよいでしょうdefaultdict

于 2012-09-22T04:18:44.260 に答える
3

前述の追加メソッドを使用する以外に、リスト インデックスを作成する方法はありますか?

はい、Range方法で。

indexList = range(len(nameList))  # create a list of indexes
print "Index list:", indexList

for i in indexList:            # Pick items out of the list
    print ">>>", nameList[i] 

Pythonで変数をテストする最良の方法は... (小文字ではなく大文字でnullあることが非常に重要です)。None

if list[i] != None: #check if there is something there
    print "Oh hello... " + list[i]
else:
    print "Nothing to see here, move along"
于 2012-09-22T04:13:50.023 に答える
1

まず、リストのインデックスが存在するかどうかをテストする方法があるかどうかを知りたいです。

リストのインデックスは数値 (0 から始まる) であり、リストが変更されると再計算されるという事実を利用できます。

if i <= len(mylist):
   print mylist[i]

別の方法として、これを回避するにIndexErrorは、次のようにキャッチします。

try:
  mylist[i] += 1
except IndexError:
  print "No item at ", i

前述の追加メソッドを使用する以外に、リスト インデックスを作成する方法はありますか?

インデックスを「作成」するのではなく、リストにアイテムを追加または削除すると自動的に設定されます。したがって、インデックスを作成する唯一の方法は、リストにアイテムを追加することです。

通常、リストを常に「事前設定」している場合、つまり、大きなリストにデフォルト値を設定してからステップスルーする場合は、設計が悪いというフラグです。

于 2012-09-22T04:26:39.503 に答える