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])
解决什么问题?您打算通过该计划实现什么目标?
你有一个错误,因为...
j
从 0
到 len(test)
,即 12
test[j]
因为 temp
只有 5 个元素。
到temp
中的select,索引应该是0
、1
、2
、3
, 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 循环很快就会变得非常混乱。我知道这不是问题的实际答案,但无论如何我认为它可能会有帮助。
我想寻求一些帮助,因为我相信我知道为什么我超出了范围,但我不知道如何解决它。谢谢你: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])
解决什么问题?您打算通过该计划实现什么目标?
你有一个错误,因为...
j
从0
到len(test)
,即12
test[j]
因为temp
只有 5 个元素。
到temp
中的select,索引应该是0
、1
、2
、3
, 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 循环很快就会变得非常混乱。我知道这不是问题的实际答案,但无论如何我认为它可能会有帮助。