1

関数のreturnブレークに気付いたので、変更されたリストを返す別の方法を見つける必要があります。

def multiply(lst):
    new = ''
    for i in range(len(lst)):
        var = lst[i] * 3
        new = new + str(var)
    return new
list1 = [1,2,3]
received = multiply(list1)
print [received]

すべての要素に3を掛けて、returnを実行しようとしています(returnを使用する必要があります)。これはただ利益をもたらします

['369']

私が返そうとしているリストは

[3,6,9]

4

4 に答える 4

4

これを試して:

def multiply(lst):
    return [val*3 for val in lst]

list1 = [1,2,3]
received = multiply(list1)
print received

インプレース編集が必要な場合は、次のことができます。

def multiply(lst):
    for idx,val in enumerate(lst):
        lst[idx] = val*3
    return lst

文字列「3」、「6」、および「9」をマージし、文字列(「369」)を含む1つの変数を返すというコードの問題は、この文字列をリストに入れるよりも。そのため、[3,6,9] の代わりに ['369'] を使用しています。以下のコメントでコードを見つけてください。

def multiply(lst):
    new = '' # new string
    for i in range(len(lst)): # for index in range of list size
        var = lst[i] * 3 # get value from list and mupltiply by 3 and then assign to varible
        new = new + str(var) # append to string new string representation of value calculated in previous row
    return new #return string 

いずれにせよ、変数を使用してプリントを配置することにより、コードをデバッグする良い方法です-ただし、コードにプリントを配置すると、そこに何が起こっているかを理解できます

于 2012-11-23T06:28:19.210 に答える
3

それnewはリストではないからです。の最初の行でmultiply()、あなたはnew = ''. これはnew文字列であることを意味します。

文字列の場合、加算演算子は連結+を実行します。つまり、次のようになります。

'a' + 'b' => 'ab'

同様に:

'1' + '2' => '12'

また

new = ''
new + str(var) => '' + '3' => '3'

明らかに、これはあなたが望むものではありません。やりたいことを行うには、新しいリストを作成して返す必要があります。

def multiplyBy3(lst):
    newList = [] #create an empty list
    for i in range(len(lst)):
        newList.append(lst[i] * 3)
    return newList

もちろん、インデックスによるリスト要素へのアクセスは、あまり「pythonic」ではありません。経験則は次のとおりです。「リスト要素のインデックスを知る必要がない限り (この場合は知りません)、リストのを反復処理します」。それに応じて上記の関数を変更できます。

def multiplyBy3(lst):
    newList = [] 
    for item in lst: #iterate over the elements of the list
        newList.append(item * 3)
    return newList

最後に、python にはlist comprehensionと呼ばれるものがあり、上記と同じことを行いますが、はるかに簡潔な (そしてより高速な) 方法で行われます。これは推奨される方法です。

def multiplyBy3(lst):
    return [item * 3 for item in lst] #construct a new list of item * 3.

リスト内包表記の詳細については、次のチュートリアルを参照してください: http://www.blog.pythonlibrary.org/2012/07/28/python-201-list-comprehensions/

于 2012-11-23T06:41:41.567 に答える
0

簡単な作業...

print [3 * x for x in [1, 2, 3]]
于 2012-11-23T06:36:24.833 に答える
0
>>> multiply = lambda l: map(lambda x: x*3, l)
>>> multiply([1,2,3])
[3, 6, 9]
于 2012-11-23T06:30:17.737 に答える