-3

Python の速度/効率/ベスト プラクティスに関する 2 つの質問。次のうちどれが「より良い」ものですか (より高速で、メモリの消費量が少ないなど):

  1.  

    for x in list:
        #do something to x
    

    また

    for x in xrange(len(list)):
        #do something to list[x]
    
  2.  

    for string in list_of_strings:
        for string2 in other_string_list:
            if string == string2:
                #do something
    

    また

    import re
    for string in list_of_strings:
        if re.match('%s'%(string),other_strings): #or re.search(etc)
             #do something
    

それほど差し迫っているわけではありませんが、私はほとんどただ興味があります。timeit() などを使用してある種の生データを取得できると思いますが、「これはあなたのコンピューターのあれよりも速い」というだけではありません。

4

1 に答える 1

2

これらを実際に比較することはできません。

for x in mylist:
    # do something to x

は通常のイディオムですが、 (変更可能でない限り)何をしてxも影響はありません。反復中に変更することが目標である場合は、mylistxmylist

for x in xrange(len(list)):
    #do something to list[x]

ほとんどの場合、悪い形です。より良い方法は使用することです

for i, x in enumerate(mylist):
    # now you can work with x and/or change mylist[i] if you need to

ただし、通常は、リスト内包表記またはジェネレータ式を使用することをお勧めします。

newlist = [foo(item) for item in mylist if bar(item)]

それはすべて、ユースケースによって異なります。

2番目の質問については、単純な文字列の等式比較に正規表現を使用するのはやり過ぎです。2つのforループをネストすることも恐ろしいことです。

for string in one_list:
    if string in other_list:
        # do something

もう少し良いでしょうが、実際のユースケースについてもっと知られていれば、それは改善できると確信しています。

于 2012-12-23T15:31:15.290 に答える