分享
三行代码  ›  专栏  ›  技术社区  ›  Ayush Tripathi

如何修复将变量分配给两个列表时出现的“Int object not iterable”?

  •  0
  • Ayush Tripathi  · 技术社区  · 1 周前

    我之前试着问过这个问题,但解释我想要的东西却做得很糟糕。希望我在这篇文章中提供的信息更有用。

    我试图创建的程序将从文件中获取以下形式的读取输入:(将有多个不同的测试用例)

    7 10
    4 8
    
    

    
    with open('C:\\Users\\ayush\\Desktop\\USACO\\paint\\paint_test.in', 'r') as fn:
        matrix = fn.readlines()
    
    input_array = []
    for line in matrix:
        input_array.append(line.strip())
    
    
    for p,q in enumerate(input_array):
        for x,y in enumerate(p):
            pass
        for a,b in enumerate(q):
            pass
    
    print(y - a)
    

    但是,当我运行此代码时,会出现以下错误:

    Traceback (most recent call last):
      File "C:\Users\ayush\Desktop\USACO\paint\paint.py", line 16, in <module>
        for x,y in enumerate(p):
    TypeError: 'int' object is not iterable
    [Finished in 0.571s]
    

    我不确定问题是什么,也不知道为什么我的列表不能被迭代。

    我希望这次我能更好地解释我的目标。请让我知道,如果有任何额外的细节,我可以尝试提供。我真的很感激你的帮助-我已经在这件事上坚持了很长时间了。

    1 回复  |  直到 1 周前
        1
  •  1
  •   Christian Reall-Fluharty    1 周前

    你想要的东西是:

    with open('C:\\Users\\ayush\\Desktop\\USACO\\paint\\paint_test.in', 'r') as fn:
        matrix = fn.readlines()
    
    input_array = []
    for line in matrix:
        input_array.append(line.strip())
    
    
    top_line, bottom_line = input_array # previously p, q
    top_right, top_left = top_line.split() # previously x, y
    bottom_right, bottom_lefft = bottom_line.split() # previously a, b
    
    
    print(int(top_left) - int(bottom_right)) # you would have run into issue subtracting strings without the int() calls
    

    ?

    如果是的话,应该可以,但是如果你只是使用 [0] [-1

    with open('C:\\Users\\ayush\\Desktop\\USACO\\paint\\paint_test.in', 'r') as fn:
        lines = fn.read().splitlines()
    
    matrix = [
        [
            int(item)
            for item in line.split()
        ]
        for line in lines
    ]
    
    top_left = matrix[0][-1]
    bottom_right = matrix[-1][0]
    print(top_left - bottom_right)