空のリストを最初の引数として、nを2番目の引数として取る関数を作成する必要があるため、次のようになります。
L=[]
function(L,5)
print L
returns:
[1,2,3,4,5]
私が考えていた:
def fillList(listToFill,n):
listToFill=range(1,n+1)
しかし、それは空のリストを返しています。
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)
明示的な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)
_
に
def fillList(listToFill,n):
listToFill=range(1,n+1)
newポインタを返さない場合は、listToFillのポインタのみを変更します。関数から新しいポインターを使用することはできず、空のリストのポインターが(外部スコープに)残っています。
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)
_
結論:
関数内で、引数を変更する場合は、引数を再割り当てして返すか、オブジェクトのメソッドを呼び出して何も返さないようにすることができます。関数の外部にいる場合のように再割り当てして何も返さないようにすることはできません。これは、関数の外部では効果がないためです。
そして、あなたがやりたいことの少し短い例:
l = []
l.extend(range(1, 5))
l.extend([0]*3)
print(l)