在Python中将大列表折叠为小列表?

在Python中将大列表折叠为小列表?,python,python-3.x,Python,Python 3.x,我有一个[1 x 29584]大小的列表,由172个输入组到172个输出组的乘积组成。我需要将此列表拆分为172个大小为[1 x 172]的较小列表。顺序是这样的,对于第一个较小的列表,我需要第一个值,然后是第173个值,然后是第345个值等等 到目前为止,我有一个初步的函数,它确实为第一组值提供了所需的列表。但是,它不适用于任何后续值。我还试图将我的所有函数与主代码分开保存在一个单独的文件中,我不知道如何调用此函数以确保所有不同的组都正确索引 large_array_size = 172*17

我有一个[1 x 29584]大小的列表,由172个输入组到172个输出组的乘积组成。我需要将此列表拆分为172个大小为[1 x 172]的较小列表。顺序是这样的,对于第一个较小的列表,我需要第一个值,然后是第173个值,然后是第345个值等等

到目前为止,我有一个初步的函数,它确实为第一组值提供了所需的列表。但是,它不适用于任何后续值。我还试图将我的所有函数与主代码分开保存在一个单独的文件中,我不知道如何调用此函数以确保所有不同的组都正确索引

large_array_size = 172*172
small_array_size = 172

for i in [0,small_array_size]:
    group_i = functions.collapse_list(results,large_array_size)
在函数文件中:

def collapse_list(results,large_array_size):
    for i in [0,large_array_size]:
        new_list_i = []
        new_list_i = results[::(172+i)]
    return(new_list_i)

最后我需要列出group_1,group_2,…,group_172,每个都由172个值组成。任何帮助都将不胜感激。

您最好为此使用词典,否则您将无法命名所有这些列表。这是一个单行解决方案(“mylist”是您的原始列表):


你最好使用字典,否则你将无法命名所有这些列表。这是一个单行解决方案(“mylist”是您的原始列表):


如果我理解正确,您需要从第一个循环传递索引

大数组大小=172*172
小数组大小=172
组=[]
对于[0,小数组大小]中的i:
groups.append(functions.collapse_list(结果,大数组大小,i))
然后在函数中,获取适当的元素

def collapse_列表(结果、大数组大小、索引):
#对于[0,大数组大小]中的i:
#新列表\u i=[]
新列表=结果[索引::172]
返回(新列表)

如果我理解正确,您需要从第一个循环传递索引

大数组大小=172*172
小数组大小=172
组=[]
对于[0,小数组大小]中的i:
groups.append(functions.collapse_list(结果,大数组大小,i))
然后在函数中,获取适当的元素

def collapse_列表(结果、大数组大小、索引):
#对于[0,大数组大小]中的i:
#新列表\u i=[]
新列表=结果[索引::172]
返回(新列表)

如果你想分割大列表并存储一个小列表列表,最简单的方法是理解。下面是一个小数字的例子来测试输出

small_array_size = 5
large_array_size = small_array_size**2

large_list = list(range(large_array_size))
small_lists = [[large_list[j*small_array_size+i] for j in range(small_array_size)]
               for i in range(small_array_size)]

print(large_list)
print(small_lists)
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]

[0,5,10,15,20],[1,6,11,16,21],[2,7,12,17,22],[3,8,13,18,23],[4,9,14,19,24]]


如果你想分割大的列表并存储一个小的列表,最简单的方法是理解

small_array_size = 5
large_array_size = small_array_size**2

large_list = list(range(large_array_size))
small_lists = [[large_list[j*small_array_size+i] for j in range(small_array_size)]
               for i in range(small_array_size)]

print(large_list)
print(small_lists)
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]

[0,5,10,15,20],[1,6,11,16,21],[2,7,12,17,22],[3,8,13,18,23],[4,9,14,19,24]]


下面是一个使用较小尺寸的示例。 假设我们在大数组中有100个数字,并希望使用问题中描述的相同算法将其分成10个小组

large_array_size = 10*10
small_array_size = 10

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]

groups = []


for i in range(small_array_size):
    group = []
    for j in range(small_array_size):
        group.append(arr[small_array_size*j + i])
    groups.append(group)

print(group)
        
上述代码的输出为:

[1, 11, 21, 31, 41, 51, 61, 71, 81, 91]
[2, 12, 22, 32, 42, 52, 62, 72, 82, 92]
[3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
[4, 14, 24, 34, 44, 54, 64, 74, 84, 94]
[5, 15, 25, 35, 45, 55, 65, 75, 85, 95]
[6, 16, 26, 36, 46, 56, 66, 76, 86, 96]
[7, 17, 27, 37, 47, 57, 67, 77, 87, 97]
[8, 18, 28, 38, 48, 58, 68, 78, 88, 98]
[9, 19, 29, 39, 49, 59, 69, 79, 89, 99]
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

对于您的情况,您只需将10替换为172,然后就可以重新使用它。

这里是一个使用较小尺寸的示例。 假设我们在大数组中有100个数字,并希望使用问题中描述的相同算法将其分成10个小组

large_array_size = 10*10
small_array_size = 10

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]

groups = []


for i in range(small_array_size):
    group = []
    for j in range(small_array_size):
        group.append(arr[small_array_size*j + i])
    groups.append(group)

print(group)
        
上述代码的输出为:

[1, 11, 21, 31, 41, 51, 61, 71, 81, 91]
[2, 12, 22, 32, 42, 52, 62, 72, 82, 92]
[3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
[4, 14, 24, 34, 44, 54, 64, 74, 84, 94]
[5, 15, 25, 35, 45, 55, 65, 75, 85, 95]
[6, 16, 26, 36, 46, 56, 66, 76, 86, 96]
[7, 17, 27, 37, 47, 57, 67, 77, 87, 97]
[8, 18, 28, 38, 48, 58, 68, 78, 88, 98]
[9, 19, 29, 39, 49, 59, 69, 79, 89, 99]
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]


对于您的情况,您只需将10替换为172,然后就可以重新使用它。

您的
新列表\u i=[]
位于循环内,请将其排除在循环之外。它每次都会重新初始化。此外,实现似乎不正确。您是否希望
new\u list\u i
分配不同的变量,如
new\u list\u 0
new\u list\u 1
等。?这样不行这能回答你的问题吗?您的
新\u列表\u i=[]
在循环内,请将其排除在循环之外。它每次都会重新初始化。此外,实现似乎不正确。您是否希望
new\u list\u i
分配不同的变量,如
new\u list\u 0
new\u list\u 1
等。?这样不行这能回答你的问题吗?嗨,谢谢你的回复。这是我需要做的,但我需要以不同的方式分割较大的数组-在本例中,我需要每五分之一的值。所以第一个较小的数组是[0,5,10,15,20]对不起,我误解了。在这种情况下,只需在嵌套理解中交换i和j。我修改了答案以反映这一点。谢谢,这很有效!嗨,谢谢你的回复。这是我需要做的,但我需要以不同的方式分割较大的数组-在本例中,我需要每五分之一的值。所以第一个较小的数组是[0,5,10,15,20]对不起,我误解了。在这种情况下,只需在嵌套理解中交换i和j。我修改了答案以反映这一点。谢谢,这很有效!第i组=。。。不会有你想要的输出。它不会创建172个不同的列表,但只会创建一个(名为'group_i')@IoaTzimas感谢您的识别,实际上我只更改了所需的部分和粘贴自OPs代码的其余副本。我的坏。组_i=。。。不会有你想要的输出。它不会创建172个不同的列表,但只会创建一个(名为'group_i')@IoaTzimas感谢您的识别,实际上我只更改了所需的部分和粘贴自OPs代码的其余副本。我的错。@Tomerikoo你是对的谢谢,我更新了代码。实际上它必须是mylist[k::172]@Tomerikoo你说得对,谢谢,我更新了我的代码。实际上它必须是mylist[k::172]