我刚开始学习Python。我正在跟随一个示例,其中在声明变量之前使用了*。我的问题是,使用这个符号的目的是什么?例如,我正在遵循:
for i in range(n):
name, *l = input().split()
s = list(map(float, l))
a[name] = s
打印变量后,我得到了一个字典,这个字典是由a生成的。但是我不明白为什么在l变量前面要使用*。
我刚开始学习Python。我正在跟随一个示例,其中在声明变量之前使用了*。我的问题是,使用这个符号的目的是什么?例如,我正在遵循:
for i in range(n):
name, *l = input().split()
s = list(map(float, l))
a[name] = s
打印变量后,我得到了一个字典,这个字典是由a生成的。但是我不明白为什么在l变量前面要使用*。
这是Python 3中引入的一项新的解包功能,称为星号(star)解包或扩展可迭代对象解包。
当您执行以下操作时:
name, *l = input().split()
split
的结果分成两部分:
name
获取列表的第一个元素l
获取列表的其余部分(浮点数)因此,假设您有这样一行:
name 0.0 1.0 2.0 3.0
split
将name
设置为"name"
,而l
接受["0.0", "1.0", "2.0", "3.0"]
。通过list(map(float ...
将l
转换为浮点数列表。
然后使用name
作为键,浮点数列表作为值。
附注:您的循环可以用字典推导式总结如下:
a = {name:list(map(float,l)) for name, *l in (input().split() for _ in range(n))}