无法根据用户输入创建能够在整数和浮点数之间进行dinstinguish的列表

时间:2017-11-16 13:16:20

标签: python list

代码应该创建一个包含五个列表的列表,每个列表都是根据用户每次输入的数字(五个)创建的。所以例如如果用户键入

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或float,但似乎无法使其工作。

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)

3 个答案:

答案 0 :(得分:1)

基本上在您的代码中,您尝试访问x循环中列表num的{​​{1}}元素,但for in不是内容中元素的索引列表,但引用它。

看看修改后的代码:

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 :(得分:0)

这种方法可以完成你所追求的效果,并且用更少的线条来实现:

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',根据字符串选择float或integer:

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)

答案 2 :(得分:0)

list comprehensionstr.find一起使用,看看是否要转换为floatint

>>> 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 values:

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]]