Python 3.x : 我不在范围内

Python 3.x : I'm out of range

我想寻求一些帮助,因为我相信我知道为什么我超出了范围,但我不知道如何解决它。谢谢你:D

#Import input.
from pathlib import Path
test = Path(r'C:\Users\Helphy\Desktop\Perso\GitHub\Advent_of_Code_2021\Day_3\Input.txt').read_text().split("\n")
#Defined some variable 
temp = []
finalnumtemp = []
finalnum = []
f_num = []
zero = 0
one = 0
for t in range(len(test)):
    for j in range(len(test)):
        temp = list(test[j])
        print(temp)
        finalnumtemp.append(temp[j])
        print(finalnumtemp)
     """for i in range(len(finalnumtemp)):
        if int(finalnumtemp[i]) == 0:
            zero += 1
        else:
            one += 1
    if zero > one:
        finalnum.append(0)
    else:
        finalnum.append(1)
    zero == 0
    one == 0
    finalnumtemp = []
print(finalnum)"""
    Input :
    00100
    11110
    10110
    10111
    10101
    01111
    00111
    11100
    10000
    11001
    00010
    01010
error: An exception has occurred: IndexError 
list index out of range
  File "C: \ Users \ Helphy \ Desktop \ Perso \ GitHub \ Advent_of_Code_2021 \ Day_3 \ Day_3.py", line 16, in <module>
    finalnumtemp.append (temp [j])

解决什么问题?您打算通过该计划实现什么目标?

你有一个错误,因为...

  • j0len(test),即 12
  • test[j] 因为 temp 只有 5 个元素。

temp中的select,索引应该是0123 , 4(从左数第一、第二、第三……)或 -1-2-3-4-5 (从右数第一,第二,第三,...)。

要将 temp 的第一个附加到 finalnumtemp,修复

        finalnumtemp.append(temp[j])

        finalnumtemp.append(temp[0])

也许您应该研究一下列表理解。我知道一开始可能有点令人生畏,但我个人发现在我掌握了它们之后,它比嵌套 for 循环更有意义。您可以在一行中将零和一的字符串转换为单独的整数列表:

numbers = [[int(char) for char in line] for line in test]
[[0, 0, 1, 0, 0], [1, 1, 1, 1, 0], ... , [0, 0, 0, 1, 0], [0, 1, 0, 1, 0]]

然后获取第一个数字(或任何数字):

first_num = [num[0] for num in numbers]
[0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0]

如果您愿意,甚至可以对列表执行操作:

sum_num = [sum(num) for num in numbers]
[1, 4, 3, 4, 3, 4, 3, 3, 1, 3, 1, 2]

嵌套的 for 循环很快就会变得非常混乱。我知道这不是问题的实际答案,但无论如何我认为它可能会有帮助。