web-dev-qa-db-ja.com

リストに記入する方法

空のリストを最初の引数として、nを2番目の引数として取る関数を作成する必要があるため、次のようになります。

L=[]
function(L,5)
print L
returns:
[1,2,3,4,5]

私が考えていた:

def fillList(listToFill,n):
    listToFill=range(1,n+1)

しかし、それは空のリストを返しています。

8
Linus Svendsson

extendの使用法を検討してください。

 >>> l = [] 
 >>> l.extend(range(1、6))
 >>> print l 
 [1、2 、3、4、5] 
 >>> l.extend(range(1、6))
 >>> print l 
 [1、2、3、4、 5、1、2、3、4、5] 

関数を作成したい場合(同じことを行う):

def fillmylist(l, n):
    l.extend(range(1, n + 1))
l = []
fillmylist(l, 5)
17
tito

明示的なreturnまたはyieldのない関数はNoneを返します。あなたが欲しいのは

_def fill_list(l, n):
    for i in xrange(1, n+1):
        l.append(i)
    return l
_

しかし、それは非常に非Python的です。 range(1, n+1)を呼び出すだけで、_[1,2,3,4,5]_のリスト_n=5_も返されます。

_def fill_list(n):
    return range(1, n+1)
_
4
Fred Foo

def fillList(listToFill,n):
    listToFill=range(1,n+1)

newポインタを返さない場合は、listToFillのポインタのみを変更します。関数から新しいポインターを使用することはできず、空のリストのポインターが(外部スコープに)残っています。

0
Themerius
  • もしあなたがそうするなら :

def fillList(listToFill,n): listToFill=range(1,n+1)

関数スコープ内に新しいリストが作成され、関数が終了すると消えます。役に立たない。

  • と:

def fillList(listToFill,n): listToFill=range(1,n+1) return listToFill()

リストを返し、次のように使用する必要があります。

_newList=fillList(oldList,1000)
_
  • そして最後に引数を返さずに:

def fillList(listToFill,n): listToFill.extend(range(1,n+1))

そしてそれをこのように呼びます:

_fillList(oldList,1000)
_

結論

関数内で、引数を変更する場合は、引数を再割り当てして返すか、オブジェクトのメソッドを呼び出して何も返さないようにすることができます。関数の外部にいる場合のように再割り当てして何も返さないようにすることはできません。これは、関数の外部では効果がないためです。

0
Antoine Gallix

そして、あなたがやりたいことの少し短い例:

l = []
l.extend(range(1, 5))
l.extend([0]*3)

print(l)
0
user5214530