簡體   English   中英

在 Python 中將大列表折疊成較小的列表?

[英]Collapse large list into smaller lists in Python?

我有一個大小為 [1 x 29,584] 的列表,由 172 個輸入組到 172 個 output 組的乘積組成。 我需要將此列表拆分為 172 個較小的 [1 x 172] 大小的列表。 排序是這樣的,對於第一個較小的列表,我需要第一個值,然后是第 173 個值,然后是第 345 個值等。

到目前為止,我有一個初步的 function 確實為我提供了第一組值的所需列表。 但是,它不適用於任何后續值。 我還試圖將我的所有函數保存在與主代碼不同的文件中,我不確定如何調用此 function 以確保所有不同的組都被正確索引?

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”是您的原始列表):

res={'group_'+str(k+1): mylist[k::172] for k in range(172)}

如果您想切分大列表並存儲較小列表的列表,最簡單的方法是使用理解。這是一個使用較小數字的示例來測試 output

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)
        

上述代碼的output為:

[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,然后您就可以重復使用它。

如果我理解正確,您需要從第一個循環傳遞索引

large_array_size = 172*172
small_array_size = 172

groups = []
for i in [0,small_array_size]:
    groups.append(functions.collapse_list(results,large_array_size, i))

然后在function中,得到相應的元素

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM