在一行中创建n个空字符串

Jes*_*ess 8 python python-2.7

可能是重复(对不起).我环顾四周,找不到答案.

我想n在一个衬里中生成一个空字符串列表.

我试过了:

>>> list(str('') * 16)
# ['']
>>> list(str(' ') * 16)
# [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
# anything with a char in it is working
Run Code Online (Sandbox Code Playgroud)

以下工作,但有更好的方法吗?为什么不起作用list(str('') * 16)

>>> [str() for c in 'c' * 16]
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
Run Code Online (Sandbox Code Playgroud)

agf*_*agf 10

请参阅Python标准类型页面:

>>> [''] * 16
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
Run Code Online (Sandbox Code Playgroud)

s*n,n*s

n串联的浅层副本

其中s是一个序列,n是一个整数.

该操作文档的完整脚注:

n小于0的值被视为0(这产生与s相同类型的空序列).还要注意副本很浅; 嵌套结构不会被复制.这常常困扰着新的Python程序员; 考虑:

>>> lists = [[]] * 3
>>> lists
[[], [], []]
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]]
Run Code Online (Sandbox Code Playgroud)

发生的事情是[[]]是一个包含空列表的单元素列表,因此[[]]*3的所有三个元素都是(指向)这个空列表.修改列表的任何元素都会修改此单个列表.您可以通过以下方式创建不同列表的列表:

>>> lists = [[] for i in range(3)]
>>> lists[0].append(3)
>>> lists[1].append(5)
>>> lists[2].append(7)
>>> lists
[[3], [5], [7]]
Run Code Online (Sandbox Code Playgroud)


Joh*_*ooy 5

您可以乘以这样的列表。由于''不可变的,因此您不必担心它们都是对同一字符串的引用。

[''] * 16
Run Code Online (Sandbox Code Playgroud)

您不能对可变对象(例如列表或字典)使用相同的技巧。你需要使用类似你上一个版本的东西

[mutable_thing() for c in range(16)]
Run Code Online (Sandbox Code Playgroud)

或者

[[] for c in range(16)]
Run Code Online (Sandbox Code Playgroud)

或者

[{} for c in range(16)]
Run Code Online (Sandbox Code Playgroud)