Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用字符串填充python中的3D列表_Python_Python 3.x_List - Fatal编程技术网

用字符串填充python中的3D列表

用字符串填充python中的3D列表,python,python-3.x,list,Python,Python 3.x,List,我有一个字符串,我想用它填充一个结构。该结构是一个名为“mega”的列表。“mega”中的每个元素都是一个包含2个元素的列表。这些元素中的每一个依次是由4个元素组成的列表。总的来说,我们有一个n*2*4维的结构 我想将字符串“断开”为相等长度(每个4项)“块”。“mega”的每个元素将在第一个列表中包含“chunk”值的原始索引(指输入字符串索引),第二个列表将包含一个“chunk”的值 同样地,我们将输入字符串切割成更小的字符串,每个子字符串由4个字符组成。为了方便起见,我们将这些字符转换为整

我有一个字符串,我想用它填充一个结构。该结构是一个名为“mega”的列表。“mega”中的每个元素都是一个包含2个元素的列表。这些元素中的每一个依次是由4个元素组成的列表。总的来说,我们有一个n*2*4维的结构

我想将字符串“断开”为相等长度(每个4项)“块”。“mega”的每个元素将在第一个列表中包含“chunk”值的原始索引(指输入字符串索引),第二个列表将包含一个“chunk”的值

同样地,我们将输入字符串切割成更小的字符串,每个子字符串由4个字符组成。为了方便起见,我们将这些字符转换为整数。因此,“mega”中的每个元素都是一个由2个项目组成的列表(每个项目由4个整数组成):

第1项-4个整数的列表,表示值在原始输入字符串中的位置(请参见“第2项”)。它们将是连续的

第二项-4个整数的列表,其值取自原始输入字符串

实际上,我们在这里做的是将输入字符串中的每个值放在n*2“表”的一行中,另一行将包含每个值的索引号。然后我们把这个表切成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