如何使用列表理解添加str+int列表?
好的,首先,我是 Python 的新手。所以,我想要实现的是创建一个列表列表,其中第一个元素是字符串,第二个元素是整数。首先,我输入多个集合,然后每个集合都在一个新行上,所以它看起来像这样:
3
Alex 40
Boris 30
Claire 50
这似乎有效
n = int(input())
nums = []
for i in range(n):
num = input().split()
num[1] = int(num[1])
nums.append(num)
但我一直在努力改进这种方法:
n = int(input())
nums = []
for i in range(n):
nums.append([[x, int(y)] for x, y in input().split()])
作为回报,这给了我“ValueError:要解压的值太多(预期为 2)”
回答
这input().split()就是幕后所做的事情:
input().split()
"Boris 30".split()
["Boris", "30"]
每次迭代时["Boris", "30"],它都会首先产生"Boris",然后产生"30"。所以当你做
[... for x, y in input().split()]
你实际上在做的是:
[... for x, y in ["Boris", "30"]]
起初它可能看起来它在做正确的事情,但它试图将字符串解包"Boris"到xand y(因此“解包的值太多”错误:它期望只有 2 个值,但它收到了 5 个值)。请注意,如果"Boris"被替换为"Bo",则代码不会引发此特定错误(但它仍然不会执行您期望的操作)。
您可以通过解压缩input().split()自身来解决此问题:
input().split()
"Boris 30".split()
["Boris", "30"]