将输入整数与列表进行比较

时间:2018-03-17 14:36:57

标签: python python-3.x list input

#Basically, for the input number given, return results that are smaller 
#than it compared with the list.

n = list(input('Please enter a Number:  '))
#map(int, str(n))
newlist = []
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

for n in a:
    if n > a:
        newlist.append(a)
        print(newlist)

不要求解决方案,只是询问n如何作为列表工作,因为当我运行我的代码时,它说:

" if n > a:
TypeError: '>' not supported between instances of 'int' and 'list' "

3 个答案:

答案 0 :(得分:3)

这是你需要的。您可以使用list comprehension过滤a所需的元素。

x = int(input('Please enter a Number:  '))
# Input 5 as an example

a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

result = [i for i in a if i < x]

print(result)
# [1, 1, 2, 3]

答案 1 :(得分:2)

假设您正在使用python3,input() method将返回一个字符串。

因此,如果您的用户输入值42input()将返回"42",(type 'str')

然后您将字符串转换为列表,继续使用42示例,您将拥有list("42") == ["4", "2"],并将此列表存储在n中。

无论如何,您不再使用变量n

您编写的for循环并未引用您之前创建的n变量(请参阅namespaces),但会创建一个新变量,其中包含a中的每个数字{1}}列表。

这意味着您要将列表的每个数字与整个列表进行比较:

1 > [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
1 > [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
2 > [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
3 > [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
...

在python3中,这将引发TypeError,而在python2中,行为将不是您所期望的。

要使代码正常工作,您可以获取用户输入并将其转换为整数,然后将此整数与列表中的每个数字进行比较,如果数字低于输入整数,则将数字附加到新列表:

myint = int(input('Please enter a Number:  '))
# type(myint) == int
newlist = []
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

# for each (n)umber in list (a):
for n in a:
    # if the provided number is higher than the actual number in list (a):
    if myint > n:
        newlist.append(n)
# print the new list once its fully filled
print(newlist)

答案 2 :(得分:1)

因为a是一个列表,迭代中的n是列表a内的整数值。例如,在第0次迭代中,n = 1但是a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]并说n > a没有意义,是吗?