2

多くの Python のリスト メソッドはその場で動作し、返されますNone(頭のてっぺんから、insertsortreverse)。

ただし、よくイライラする動作が 1 つあります。通常はオブジェクトを返す新しいリストを作成し、同時に挿入すると、新しいリストは「消えます」:

mytup = (0, 1, 2, 3, 4)
print mytup  # (0, 1, 2, 3, 4)
mylist = list(mytup)
print mylist  # [0, 1, 2, 3, 4]
newlist = list(mytup).insert(0, 10)
print newlist  # None

したがって、タプルを変更したい場合は、さらに行が必要です。

newlist = list(mytup)
newlist.insert(0, 10)
print newlist  # [10, 0, 1, 2, 3, 4]

だから私は2つの質問があります:

  1. リストコンストラクターを呼び出すとオブジェクトが返されますが、メソッドを使用してリストコンストラクターを呼び出すと、メソッドは戻り値を「オーバーライド」するというのは正しいNoneですか? 繰り返しますが、リストはどこに行くのでしょうか?
  2. タプルに挿入して 1 行でリストを返す方法はありますか? コードゴルフをしようとしているわけではありません.2つの行が論理的に異なるため、分離する価値があるとは思いません。
4

2 に答える 2

3

insertsortおよびreverseリストをインプレースで変更し、 を返しNoneます。コードでは、実際にその戻り値をnewlist変数に格納しています。

newlist = list(mytup).insert(0, 10)

そして、その新しく作成されたリスト(オンザフライで作成された)は、それへの参照がなくなったため、ガベージコレクションされます。

In [151]: mytup = (0, 1, 2, 3, 4)

In [152]: lis=list(mytup)   #create a new list object and add a reference to this new object

In [153]: newlist=lis.insert(0,10)  #perform the insert operation on lis and store None
                                    # in newlist 

In [154]: print newlist     
None

In [155]: print lis     
[10, 0, 1, 2, 3, 4]  #you can still access this list object with 
                     #the help of `lis` variable.
于 2013-04-20T14:43:43.180 に答える