无法遍历 python 中的列表

Can't iterate through a list in python

从 mysql 连接器收到数据后,当我尝试遍历列表时,python 一直告诉我数据是 int 类型:

execute() 和 fetchall() 语句:

def top_sellers(self):
        q = '''select Item, sum(Quantity) from purchases group by Item;'''
        self.cursor.execute(q)
        s = self.cursor.fetchall()
        print(s)
        print(type(s))
        for i in len(s):
            print(i)

以上代码退出:

[('beep', Decimal('3')), ('item1', Decimal('39')), ('Mask', Decimal('53')), ('Mask1', Decimal('2'))]
<class 'list'>
Traceback (most recent call last):
  File "/data/data/com.termux/files/home/projekt-red/index.py", line 326, in <module>
    main(id, password)
  File "/data/data/com.termux/files/home/projekt-red/index.py", line 324, in main
    x.load_prompt(acc_type)
  File "/data/data/com.termux/files/home/projekt-red/index.py", line 301, in load_prompt
    self.stats()
  File "/data/data/com.termux/files/home/projekt-red/index.py", line 243, in stats
    self.top_sellers()
  File "/data/data/com.termux/files/home/projekt-red/index.py", line 265, in top_sellers
    for i in len(list(s)):
TypeError: 'int' object is not iterable

len(s) 是一个整数,不可迭代。 如果你想用 n = len(s) 迭代 n 次,你需要用 range(len(s)) 替换 len(s) 像这样:

def top_sellers(self):
        q = '''select Item, sum(Quantity) from purchases group by Item;'''
        self.cursor.execute(q)
        s = self.cursor.fetchall()
        print(s)
        print(type(s))
        for i in range(len(s)):
            print(i)

编辑: 这将打印所有索引。如果要打印存储在s中的结果,那么只需删除len()range(),只保留for i in s。或者,保持如上并用 print(s[i]).

替换打印语句

您可以使用空白变量进行迭代,而不是使用 len() 函数迭代数组。 Len() 用于整数,列表中有字符串。如果我是你我会做...

def top_sellers(self):
        q = '''select Item, sum(Quantity) from purchases group by Item;'''
        self.cursor.execute(q)
        s = self.cursor.fetchall()
        print(s)
        print(type(s))
        for row in self:
            for elem in row:
                print(elem)

并且会 return...

beep
3
item1
39
Mask
53
Mask1
2

如果你想打印“('beep', '3')”,只需去掉“for elem in row”并将打印语句移到另一个 for 语句中即可。