扩展解包不在列表中创建单独的项目

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 中创建唯一项目列表? [复制]

在 ActiveX dll 项目中创建列表(对象),在 Visual Basic 6.0 中用于 c# 项目

从项目列表中创建特定形状的熊猫数据框

如何在 3 层项目中创建备份时获取 .bak 扩展名

如何在 xcode 6 beta 中创建扩展?

如何编辑列表中的每个项目并在 dart 中创建一个新项目