4
n = [3, 5, 7]

def double(lst):
    for x in lst:
        x *= 2
        print x
    return lst

print double(n)

なぜこれが返されないのn = [6, 10, 14]ですか?

次のようなより良い解決策もあるはずです[x *=2 for x in lst]が、それも機能しません。

forループとリストに関するその他のヒントは大歓迎です。

4

6 に答える 6

13

なぜこれが返されないのn = [6, 10, 14]ですか?

n、またはlst内部で呼び出されるため、double変更されることはありません。for numbersx *= 2と同等であり、参照するオブジェクトを変更せずに名前のみを再バインドします。x = x * 2x x

これを表示するには、次のように変更doubleします。

def double(lst):
    for i, x in enumerate(lst):
        x *= 2
        print("x = %s" % x)
        print("lst[%d] = %s" % (i, lst[i]))

数値のリストをその場で変更するには、その要素を再割り当てする必要があります。

def double(lst):
    for i in xrange(len(lst)):
        lst[i] *= 2

その場で変更したくない場合は、内包表記を使用します。

def double(lst):
    return [x * 2 for x in lst]
于 2013-07-15T17:06:42.097 に答える
2

これにはリスト内包表記を使用できます。

関数:

def double(lst):
    return [i*2 for i in lst]

デモ:

n = [3, 5, 7]
print(double(n))

出力:

[6, 10, 14]

Python では、リスト自体を乗算すると、次のようになります。

print([1, 2]*4)
# [1, 2, 1, 2, 1, 2, 1, 2]

したがって、必要なのはリストの項目を乗算することです。そのため、最初に for ループを使用して、リストを反復処理します。

于 2013-07-15T17:06:32.720 に答える
1

問題は、変更することxです。ただし、変更xしてもリストの要素は変更されません。

すべての要素を 2 倍したい場合は、map を使用します。

map(lambda(x):x*2, lst)
于 2013-07-15T17:06:50.180 に答える
0
a_list = [2,3,4,5,10]                         
def double_ult(lst):
    y = []                        
    for i in range(len(lst)):
        lst[i] *= 2
        y += [lst[i]]                     
    return y

print(double_ult(a_list))

結果: [4, 6, 8, 10, 20]

.append() メソッドを使用:

b_list = [2,3,4,5,10]
def double_append(lst):
    y = []
    for i in lst:
        lst = 2 * i
        y.append(lst)
    return y

print(double_append(b_list))

結果: [4, 6, 8, 10, 20]

ここにコードを入力してください

于 2021-01-28T19:03:30.830 に答える
-1

このコードを使用して、リスト内の要素を 2 倍にすることもできます。

a_list = [3, 5, 7]

multiplied_list = [要素 * a_list の要素の 2]

print(multiplied_list)

出力 = [6、10、14

于 2021-02-25T11:04:51.390 に答える