这些Python符号是什么:`[[]]*n`和`(i,)`

usu*_* me 4 python syntax

有人可以在Python中澄清这两个表示法:

  • [ [] ] * n:显然这会创建对同一对象的n个引用(在本例中为空列表).在哪种情况下这有用?
  • (i,):我看到有些人使用这种"尾随逗号"表示法(例如:在函数定义中生成{0,1,2,... n-1}的所有大小k个子集sets).这是什么意思?

Ter*_*ryA 10

是的,这确实创建了对同一对象的引用:

>>> L = [[]] * 3
>>> L
[[], [], []]
>>> L[0].append(1)
>>> L
[[1], [1], [1]]
>>> map(id, L)
[4299803320, 4299803320, 4299803320]
Run Code Online (Sandbox Code Playgroud)

无论何时您想要创建具有相同项目的对象,这都非常有用.


(i,)使用该项创建一个元组i:

>>> mytuple = (5,)
>>> print mytuple
(5,)
>>> print type(mytuple)
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)

需要逗号的原因是因为否则它将被视为整数:

>>> mytuple = (5)
>>> print mytuple
5
>>> print type(mytuple)
<type 'int'>
Run Code Online (Sandbox Code Playgroud)