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