Python:不可共享的类型:int()< range()或'int'对象不可迭代

时间:2016-05-01 16:33:35

标签: python list

我正在尝试使用python脚本来打印'@'符号,与列表中的值相关联。例如,如果列表为[1,2,3] - 脚本将打印:

1 @
2 @@
3 @@@

使用以下代码:

myList = [0,1,2,3,4,5,6]

x = 1

While x < range(len(myList)):
    print (x, end ='')

for frequency in myList[x]:
    print ('@')

print ('\n')
x = x + 1

到目前为止,我收到此错误“TypeError:unorderable types:int()&lt; range()”。我想我得到的是因为它不能将一个数字与一系列数字进行比较。

但是当我尝试使用时:

len(myList)

我得到:“TypeError:'int'对象不可迭代”。

不知道该怎么做!

4 个答案:

答案 0 :(得分:1)

正如错误所述,这是将x中的值与值range(...)进行比较:

while x < range(len(myList)):
    print (x, end ='')

这不是你想要的。相反,您希望循环遍历这些值:

for x in range(len(myList)):
    ...

同样,你的第二个循环不起作用:

for frequency in myList[x]:
    print ('@')

由于myList[x]是一个int,因此转换为“对于frequency中的每个值myList[x] ......”这实际上没有意义。你的意思是:

for frequency in range(myList[x]):
    print ('@')

答案 1 :(得分:0)

请将您的代码扔进垃圾箱并寻找更好的方法

你最好这样做:

for number in yourList:
    if number <= 0:
        print("Cannot use negative numbers or zero here!")
    else:
        print ("{} {}".format(number, "@" * number))

不要忘记,只需将此字符串乘以N即可获得字符串的N个副本,其中N为正非零数字。

答案 2 :(得分:0)

您收到错误是因为您实际上正在比较此行上的intrange对象:

while x < range(len(myList)):

要获得所需的输出,只需乘以字符串会更容易:

for i in range(7):
    print(i, i * '@')

如果要省略零行,请将呼叫调整为range

答案 3 :(得分:0)

您可以使用for循环执行此操作:

>>> myList = [0,1,2,3,4,5,6]
>>> for item in myList:
...     if item > 0:
...         print(item, '@' * item)
... 
1 @
2 @@
3 @@@
4 @@@@
5 @@@@@
6 @@@@@@

在python中,您可以使用'*'运算符多次打印字符串,就像一种乘法。

如果您想要在项目为零时输出零但没有'@',请删除if item > 0:并删除其后面的行。