代码应该创建一个包含五个列表的列表,每个列表都是根据用户每次输入的数字(五个(创建的。因此,例如,如果用户输入
1 2 3 4 5
1 2
1.5 2
2.2
1
输出应为: [[1, 2, 3, 4, 5], [1, 2], [1.5, 2], [2,2], [1]]
任何帮助,不胜感激。我知道要解决此问题,您需要将字符串转换为 int 或浮点数,但似乎无法让它工作。
nlist = []
n = len(nlist)
while n < 5:
num = input("Enter a Number: ").split()
for x in num:
if '.' in num[x]:
num[x] = float(num[x])
else:
num[x] = int(num[x])
nlist.append(num)
n = n + 1
print(nlist)
代码中,你尝试访问for in
循环中列表num
的第x
个元素,但是x
不是列表中元素的索引,而是对它的引用。
看看修改后的代码:
nlist = []
n = len(nlist)
while n < 5:
num = input("Enter a Number: ").split()
tmplist = []
for x in num:
if '.' in x:
x = float(x)
else:
x = int(x)
tmplist.append(x)
nlist.append(tmplist)
n = n + 1
print(nlist)
因此,对于以下输入:
Enter a Number: 1 2 3 4 5
Enter a Number: 1 2
Enter a Number: 1.5 2
Enter a Number: 2.2
Enter a Number: 1
它将输出:
[[1, 2, 3, 4, 5], [1, 2], [1.5, 2], [2.2], [1]]
将 list comprehension
与 str.find
一起使用以查看是转换为 float
还是int
:
>>> out = []
>>> for i in range(n):
inp = input().split()
out.append([ float(ele) if ele.find('.')>-1 else int(ele) for ele in inp])
#driver 值 :
IN : n = 5
IN :
1 2 3 4 5
1 2
1.5 2
2.2
1
OUT : [[1, 2, 3, 4, 5], [1, 2], [1.5, 2], [2.2], [1]]
此方法可以达到您所追求的效果,并且行数要少得多:
nList = []
for n in range(5):
#Takes an input "5 3.5 5 2 3" converts it to [5, 3.5, 5, 2, 3]
listItems = list(map(eval, input("Numbers for sub-list: ").split()))
#Append the list to the nList
nList.append(listItems)
print(nList)
因此,在">listItem"变量中,它不是嵌套两个循环,而是简单地将输入作为字符串:
"5 3.5 2"
拆分它:
input().split()
["5", "3.5", "2"]
然后将每个项目映射到"eval",根据字符串选择浮点数或整数:
list(map(eval, input().split()))
[5, 3.5, 2]
重要说明:">eval"可能是一个危险的命令,在进一步使用它之前,请务必广泛查找有关它的文档。查看下面的评论以获取更多详细信息。
或者如果您不想使用 eval,请考虑以下解决方案:
nList = []
for n in range(5):
itemList = input("Numbers to add: ").split()
subList = []
for item in itemList:
if "." in item:
item = float(item)
else:
item = int(item)
subList.append(item)
nList.append(subList)
print(nList)