172

私のプログラムでは、ユーザーは numberを入力してから、リストに格納される文字列の数をn入力します。n

特定のリスト インデックスが存在する場合に関数を実行するようにコーディングする必要があります。

これは、 に関する if ステートメントをネストしたという事実によって、さらに複雑になりlen(my_list)ます。

これは私が今持っているものを簡略化したものですが、動作していません:

n = input ("Define number of actors: ")

count = 0

nams = []

while count < n:
    count = count + 1
    print "Define name for actor ", count, ":"
    name = raw_input ()
    nams.append(name)

if nams[2]: #I am trying to say 'if nams[2] exists, do something depending on len(nams)
    if len(nams) > 3:
        do_something
    if len(nams) > 4
        do_something_else

if nams[3]: #etc.
4

12 に答える 12

194

考えられる各長さをlen(n)チェックするよりも、リストの長さを使用して決定を通知する方が便利でしょうか。n[i]

于 2012-08-02T21:46:38.343 に答える
108

特定のリスト インデックスが存在する場合に関数を実行するようにコーディングする必要があります。

これはtry ブロックの完璧な使い方です:

ar=[1,2,3]

try:
    t=ar[5]
except IndexError:
    print('sorry, no 5')   

# Note: this only is a valid test in this context 
# with absolute (ie, positive) index
# a relative index is only showing you that a value can be returned
# from that relative index from the end of the list...

ただし、定義により、Python リスト内の と の間にあるすべての項目が0存在len(the_list)-1します (つまり、 がわかっている場合は try ブロックは必要ありません0 <= index < len(the_list))。

0 と最後の要素の間のインデックスが必要な場合は、enumerateを使用できます。

names=['barney','fred','dino']

for i, name in enumerate(names):
    print(i + ' ' + name)
    if i in (3,4):
        # do your thing with the index 'i' or value 'name' for each item...

ただし、定義された「インデックス」を探している場合は、間違った質問をしていると思います。おそらく、マッピングコンテナー (dict など) とシーケンスコンテナー (リストなど) の使用を検討する必要があります。次のようにコードを書き直すことができます。

def do_something(name):
    print('some thing 1 done with ' + name)
        
def do_something_else(name):
    print('something 2 done with ' + name)        
    
def default(name):
    print('nothing done with ' + name)     
    
something_to_do={  
    3: do_something,        
    4: do_something_else
    }        
            
n = input ("Define number of actors: ")
count = 0
names = []

for count in range(n):
    print("Define name for actor {}:".format(count+1))
    name = raw_input ()
    names.append(name)
    
for name in names:
    try:
        something_to_do[len(name)](name)
    except KeyError:
        default(name)

次のように実行します。

Define number of actors: 3
Define name for actor 1: bob
Define name for actor 2: tony
Define name for actor 3: alice
some thing 1 done with bob
something 2 done with tony
nothing done with alice

短いバージョンでは、try/except ではなく.getメソッドを使用することもできます。

>>> something_to_do.get(3, default)('bob')
some thing 1 done with bob
>>> something_to_do.get(22, default)('alice')
nothing done with alice
于 2012-08-02T21:42:43.500 に答える
21

len(nams)コード内で等しい必要がありnます。すべてのインデックス0 <= i < nが「存在」します。

于 2012-08-02T21:42:45.003 に答える
7

特定のリスト インデックスが存在する場合に関数を実行するようにコーディングする必要があります。

あなたはすでにこれをテストする方法を知っており、実際にコードでそのようなテストをすでに実行しています

長さのリストの有効なインデックスは、n包括0n-1です。

したがって、リストi 長さが少なくともi + 1.

于 2012-08-02T22:47:12.173 に答える
3

挿入されたアクターデータを反復する場合:

for i in range(n):
    if len(nams[i]) > 3:
        do_something
    if len(nams[i]) > 4:
        do_something_else
于 2012-08-02T21:45:36.380 に答える