2

私の実際の例はもっと複雑なので、概念を単純な例にまとめました。

l = [1,2,3,4,5,6,7,8]

for number in l:
    calc = number*10
    print calc

ループの反復ごとにcalc、新しいリストを作成するために使用したい変数 ( ) が作成されます。私の実際のプロセスには、値を で乗算する以上のことが含まれている10ため、この方法で新しいリストの各値を設定できるようにしたいと考えています。新しいコードは次のようになります。

l = [1,2,3,4,5,6,7,8]

for number in l:
    calc = number*10
    # set calc as x'th entry in a new list called l2 (x = iteration cycle)

print l2

次に、新しいリストを出力します。[10,20,30,40,...]

4

7 に答える 7

10

いくつかのオプションがあります...

リスト内包表記

十分に短い場合は、リスト内包表記を使用します。

new_list = [number * 10 for number in old_list]

map()

map()関数が以前に存在する場合は、を使用することもできます (または、たとえば を使用しますlambda)。

def my_func(value):
    return value * 10

new_list = map(my_func, old_list)

Python 3.xmap()ではリストを返さないことに注意してください (したがって、次のようにする必要があります: new_list = list(map(my_func, old_list)))。

for ... in単純なループを使用して他のリストを埋める

または、単純なループを使用することもできます - それはまだ有効で Pythonic です:

new_list = []

for item in old_list:
    new_list.append(item * 10)

発電機

多くの処理がある場合 (あなたが言ったように)、要求されたときに遅延して実行したい場合、または結果が大きすぎる場合は、ジェネレーターを使用したい場合があります。ジェネレーターは次の要素を生成する方法を記憶し、以前に何が起こったかを忘れます (単純化しています)。そのため、それらを 1 回繰り返すことができます (ただし、すべての結果を格納するリストなどを明示的に作成することもできます)。

あなたの場合、これが印刷専用の場合、これを使用できます:

def process_list(old_list):
    for item in old_list:
        new_item = ...  # lots of processing - item into new_item
        yield new_item

そしてそれを印刷します:

for new_item in process_list(old_list):
    print(new_item)

Python の wiki で見つけることができるジェネレーターの詳細: http://wiki.python.org/moin/Generators

「反復回数」へのアクセス

しかし、質問が反復回数を取得する方法に関するものである場合は、以下をご覧くださいenumerate()

for index, item in enumerate(old_list):
    print('Item at index %r is %r' % (index, item))
于 2013-06-03T01:20:42.530 に答える
7

リスト内包表記に直接飛び込まずにそれを行う方法を次に示します。一部のフォントlと同じであるため、変数名として使用するのは良い考えではありません。そのため、変更しました (ただし、実際にはそれほど良くはありません:))。1l1

l1 = [1,2,3,4,5,6,7,8]
l2 = []
for number in l1:
    calc = number*10
    print calc
    l2.append(calc)

リスト内包表記は、このパターンを記述するためのよりコンパクトな方法を提供します

l2 = [ number*10 for number in l1 ]
于 2013-06-03T01:23:28.350 に答える
3

リスト内包表記を使用します:

>>> l = [1,2,3,4,5,6,7,8]
>>> l2 = [ item*10 for item in l]
>>> l2
[10, 20, 30, 40, 50, 60, 70, 80]

これはほぼ同等ですが、リスト内包表記は通常の for ループよりも高速です。

>>> l2 = []
>>> for number in l:
...     calc = number * 10  #do some more calculations
...     l2.append(calc)     #appends the final calculated value at the end of l2
...     
>>> l2
[10, 20, 30, 40, 50, 60, 70, 80]

実行中のすべての計算用の関数を作成し、リスト内包表記内で関数を呼び出すこともできます。

def solve(x):
   #do some calculations here
   return calculated_value

l2 = [ solve(item) for item in l]
于 2013-06-03T01:20:36.357 に答える
0

あなたの問題に対する簡単な答えは、calc以下に示すようにリストに追加することです:

l = [1,2,3,4,5,6,7,8]

your_list = []
for number in l:
    calc = number*10
    your_list.append(calc)

リスト内の変数にアクセスするには、スライス構文を使用します。

つまり、リストの 2 番目の要素はyour_list[1]、5 番目の になりyour_list[4]ます。

ある時点でリストを空にする必要があると思います。スライスでこれを行うには、使用しますcalc[:] = []

于 2013-06-03T01:25:41.193 に答える
0

したがって、リストのすべての要素に関数を適用したいと思います。

リスト内包表記を試しましたか?

[num*10 for num in l]

この単純な例に必要なものを提供する必要があります。

当然のことながら、より複雑な一連の操作がある場合は、以前に定義した関数を使用できます。

def explode(n):
    return (n + (n * n) - (3 * n))

[explode(num) for num in l]
于 2013-06-03T01:24:08.873 に答える