用字符串填充python中的3D列表
我有一个字符串,我想用它填充一个结构。该结构是一个名为“mega”的列表。“mega”中的每个元素都是一个包含2个元素的列表。这些元素中的每一个依次是由4个元素组成的列表。总的来说,我们有一个n*2*4维的结构 我想将字符串“断开”为相等长度(每个4项)“块”。“mega”的每个元素将在第一个列表中包含“chunk”值的原始索引(指输入字符串索引),第二个列表将包含一个“chunk”的值 同样地,我们将输入字符串切割成更小的字符串,每个子字符串由4个字符组成。为了方便起见,我们将这些字符转换为整数。因此,“mega”中的每个元素都是一个由2个项目组成的列表(每个项目由4个整数组成): 第1项-4个整数的列表,表示值在原始输入字符串中的位置(请参见“第2项”)。它们将是连续的 第二项-4个整数的列表,其值取自原始输入字符串 实际上,我们在这里做的是将输入字符串中的每个值放在n*2“表”的一行中,另一行将包含每个值的索引号。然后我们把这个表切成4块,并用这些块填充一个列表 以下是我迄今为止编写的代码:用字符串填充python中的3D列表,python,python-3.x,list,Python,Python 3.x,List,我有一个字符串,我想用它填充一个结构。该结构是一个名为“mega”的列表。“mega”中的每个元素都是一个包含2个元素的列表。这些元素中的每一个依次是由4个元素组成的列表。总的来说,我们有一个n*2*4维的结构 我想将字符串“断开”为相等长度(每个4项)“块”。“mega”的每个元素将在第一个列表中包含“chunk”值的原始索引(指输入字符串索引),第二个列表将包含一个“chunk”的值 同样地,我们将输入字符串切割成更小的字符串,每个子字符串由4个字符组成。为了方便起见,我们将这些字符转换为整
import pyperclip
import math
import termtables as tt
# Creating main_input from the txt file
# main_input is a list of strings
string = open("input01.txt").read()
main_input = string.split(",")
# Converting main_input values to integers
for i in range(len(main_input)):
main_input[i] = int(main_input[i])
# print(main_input)
# Calculating number of the quadruplets
quad_num = int(math.ceil(len(main_input) / 4))
print('quad_num: ' + str(quad_num) + '\n')
# Initializing mega - a list of the quadruplets
mega = [None] * quad_num
# print(mega)
# Initializing each quadruplet as a list of 2 items
for i in range(len(mega)):
mega[i] = [None] * 2
print('mega after duplication:\n')
print(mega)
print('\n')
# Each quadruplet is composed of 2 lists, each one contains 4 elements
for i in range(len(mega)):
mega[i][0] = [None] * 4
mega[i][1] = [None] * 4
print('mega after each quadruplication:\n')
print(mega)
print('\n')
# Index for iterating over mega
mega_index = 0
print('This is the main input: \n')
print(main_input)
print('\n')
# Populating "mega"
for global_index in range(len(main_input) - 1):
if (global_index % 4) == 0:
for local_index in range(4):
mega[mega_index][0][local_index] = int(global_index + local_index)
mega[mega_index][1][local_index] = int(main_input[global_index + local_index])
mega_index = mega_index + 1
print('This is mega afer populating:\n')
print(mega)
我的代码有两个问题:
用于范围内的全局索引(len(主输入)):
到
用于范围内的全局索引(len(主输入)-1):
为了避免出现“索引外”错误,我不知道为什么
计数有关,但由于我是初学者,我很难理解到底是什么问题。我将感谢任何帮助和指导,如果您阅读到目前为止,非常感谢
顺便说一句,这件事是我试图解决今年挑战赛中的一个问题的一部分,所以请不要捣乱(我知道我试图做的不是解决AOC问题所必需的,我这样做是为了提高我的编程技能,这是我在试图解决AOC挑战时为自己“发明”的一个练习) 因此,问题基本上是由于试图用main_input
中的值填充mega
,而这些源值(在main_input
中)的索引超出范围。我通过将main输入
长度延长到可用“Blank”值除数4的最近数,从而解决了这个问题。然后我添加了一个条件,在填充for
循环期间从main\u input
提取时,检查main\u input
中的下一个值是否为“空白”
import pyperclip
import math
import termtables as tt
# Creating main_input from the txt file
# main_input is a list of strings
string = open("input01.txt").read()
main_input = string.split(",")
# Converting main_input values to integers
for i in range(len(main_input)):
main_input[i] = int(main_input[i])
print(main_input)
if (len(main_input) % 4 != 0):
if (len(main_input) % 4 == 1):
main_input.append('Blank')
main_input.append('Blank')
main_input.append('Blank')
if (len(main_input) % 4 == 2):
main_input.append('Blank')
main_input.append('Blank')
if (len(main_input) % 4 == 3):
main_input.append('Blank')
# Calculating number of the quadruplets
print('Length of main_input: ' + str(len(main_input)))
quad_num = int(math.ceil(len(main_input) / 4))
print('quad_num: ' + str(quad_num) + '\n')
# Initializing mega - a list of the quadruplets
mega = [None] * (quad_num)
# print(mega)
# Initializing each quadruplet as a list of 2 items
for i in range(len(mega)):
mega[i] = [None] * 2
print('mega after duplication:\n')
print(mega)
print('\n')
# Each quadruplet is composed of 2 lists, each one contains 4 elements
for i in range(len(mega)):
mega[i][0] = [None] * 4
mega[i][1] = [None] * 4
print('mega after quadruplication:\n')
print(mega)
print('\n')
# Index for iterating over mega
mega_index = 0
print('This is the main input: \n')
print(main_input)
print('\n')
# Populating "mega"
for global_index in range(len(main_input)):
if (global_index % 4) == 0:
for local_index in range(4):
mega[mega_index][0][local_index] = int(global_index + local_index)
if main_input[global_index + local_index] != 'Blank':
mega[mega_index][1][local_index] = int(main_input[global_index + local_index])
mega_index = mega_index + 1
print('This is mega afer populating:\n')
print(mega)
python以0作为索引开始,计数为n-1