在 python 中解压为 int 和 string

unpack to int and string in python

有没有解包成不同类型的方法?是这样的:

# data = [4, "lorem", "ipsum", "dolor", "sit", "amet"]
(parts, *words) = data

data 已提供。我从不分配这个值。我添加作为例子。 parts 必须是一个整数,列表的所有其余部分都分配为字符串列表。

我找到的唯一方法是将变量 parts 重新分配为下一个:

(parts, *words) = [4, "lorem", "ipsum", "dolor", "sit", "amet"]
parts = int(parts)

但我不喜欢连续两次重复赋值变量。由于 python 是一种保持简洁的语言,我正在寻找解决方案。

*编辑: 让我知道连续两次重新分配是否有效。

这个怎么样?它会测试每个项目的类型,并根据需要将其放入适当的列表中。

data = [4, "lorem", "ipsum", "dolor", "sit", "amet"]
parts = []
words = []
[parts.append(item) if type(item) == int else words.append(item) for item in data]

在Python的静态类型注释中,lists(以及除tuples之外的所有序列)被假定为同类类型(可能仍然是联合多种类型,但它不是不同的单一类型,具体取决于您正在查看的索引)。您的 list 违反了该假设,因为索引 0 具有一种类型,而其他索引具有不同的类型。尽管 Python 通常不会强制执行 list 的“预期”用法,但类型检查器会强制执行,并且没有任何机制可以像您所做的那样避免手动强制转换或类型转换这里。

简短回答:你在“滥用”lists,typing 不会在你这样做时帮助你。 所以要么 ignore/disable 这段代码的类型检查器(毕竟它会工作得很好),或者忍受毫无意义的转换。