扩展解包不在列表中创建单独的项目
Posted
技术标签:
【中文标题】扩展解包不在列表中创建单独的项目【英文标题】:Extended unpacking not creating separate items in list 【发布时间】:2022-01-23 10:21:51 【问题描述】:我正在执行以下代码:
s = 'python'
a, b, *c, d = s[0], s[1], s[2:-1], s[-1]
print(c)
我的输出为['tho']
请帮我理解为什么输出不是['t', 'h', 'o']
?
由于我们在 LHS 上使用 * operator
,所以输出应该是 ['t', 'h', 'o']
而不是 ['tho']
【问题讨论】:
a, b, *c, d = s[0], s[1], *s[2:-1], s[-1]
它按预期工作。您将子字符串作为第三项,放入 c 集合中。一项。
为什么会这样?右边有四个项目,左边有四个变量。 *c
没有解包项目的值,它从右边获取尽可能多的项目,以便剩余的可以干净地分配给其他三个变量。
【参考方案1】:
这是因为s[2:-1]
没有解包。没有理由解包。
你需要:
a, b, *c, d = s[0], s[1], *s[2:-1], s[-1]
只有当有多个非附加值时,解包赋值才会解包为一个多个值序列,例如't', 'h', 'o'
,而不是当值为'tho'
时。
现在:
print(c)
是:
['t', 'h', 'o']
【讨论】:
【参考方案2】:您还需要解压缩字符串,否则只有一个元素 ('tho'
):
s = 'python'
a, b, *c, d = s[0], s[1], *s[2:-1], s[-1]
print(c)
输出:['t', 'h', 'o']
我这就是你要找的:
a,b,*c,d = s
print(c)
拆包真正有意义的地方
【讨论】:
以上是关于扩展解包不在列表中创建单独的项目的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JavaScript 中创建唯一项目列表? [复制]