簡體   English   中英

列表的列表,減去每個子列表中的值並將結果存儲在新的子列表中

[英]A list of lists, substract the values in each sub-list and store the results in new sub-lists

我有一個列表,其中包含許多子列表。 每個子列表都有兩個值。 我想從每個子列表中的第二個值中減去第一個值,並將結果存儲在新列表中。

現在這些新列表也是另一個列表列表的子列表。

因此,例如, lists_of_lists1是這樣的:

lists_of_lists1 = [ran_list1, ran_list2, ran_list3, ran_list4, ran_list5, ran_list6,
          ran_list7,ran_list8]

這是ran_list1 ,一個子列表。 所有子列表看起來都與此類似。

[[34.39460533995712, 47.84539466004288],
 [33.095772478005635, 46.50422752199436],
 [36.66750709361337, 44.44360401749775],
 [33.33459042563053, 42.14689105585095],
 [36.638367322851444, 43.62250224236595],
 [36.465767572400296, 49.200899094266376],
 [32.220702473831686, 42.65929752616831],
 [34.31937169660605, 41.14216676493242],
 [31.198269305510344, 42.801730694489656],
 [31.216878962221035, 40.6092079943007],
 [28.465488368524227, 38.793770890735026],
 [34.50342917911651, 45.32990415421682]]

現在減去ran_list1[1] - ran_list1[0] (以這種方式對每個子列表),結果存儲在這里:

list_of_lists2 = [ran_subresult1 , ran_subresult2 , ran_subresult3 , ran_subresult4 ,
            ran_subresult5 , ran_subresult6 , ran_subresult7, ran_subresult8]

所以ran_subresult1是一個空列表, ran_list1[1] - ran_list1[0]的結果將存儲在其中,而ran_subresult2將存儲ran_list2[1] - ran_list2[0]的結果,依此類推......

我的嘗試看起來像這樣:

for i in lists_of_lists1:
    for j in range(len(i)):
        list_of_lists2[j].append(lists_of_lists1[j][1] - lists_of_lists1[j][0])

我對ij有點迷茫,我想我的方向是正確的,但我仍然做不到。 我會很感激一些幫助。 謝謝!

編輯 - 這是預期的 output。從lists_of_lists1 ,我們以第一個子列表為例,即ran_list1 ran_list1中的值是數字對:

[[34.39460533995712, 47.84539466004288],
 [33.095772478005635, 46.50422752199436],
 [36.66750709361337, 44.44360401749775],
 [33.33459042563053, 42.14689105585095],
 [36.638367322851444, 43.62250224236595],
 [36.465767572400296, 49.200899094266376],
 [32.220702473831686, 42.65929752616831],
 [34.31937169660605, 41.14216676493242],
 [31.198269305510344, 42.801730694489656],
 [31.216878962221035, 40.6092079943007],
 [28.465488368524227, 38.793770890735026],
 [34.50342917911651, 45.32990415421682]]

現在以這種方式減去:

47.84539466004288 - 34.39460533995712 = 13.451
46.50422752199436 - 33.095772478005635 = 13.409

等等...

現在這些結果將存儲在ran_subresult1中,這是list_of_lists2中的第一個子列表。

因此, ran_subresult1將是[13.451, 13.409.....]

每個子列表依此類推。

這是您的 MWE 的替代方法:

main_list = [
    [
        [34.39460533995712, 47.84539466004288],
        [33.095772478005635, 46.50422752199436],
        [36.66750709361337, 44.44360401749775],
        [33.33459042563053, 42.14689105585095],
        [36.638367322851444, 43.62250224236595],
        [36.465767572400296, 49.200899094266376],
        [32.220702473831686, 42.65929752616831],
        [34.31937169660605, 41.14216676493242],
        [31.198269305510344, 42.801730694489656],
        [31.216878962221035, 40.6092079943007],
        [28.465488368524227, 38.793770890735026],
        [34.50342917911651, 45.32990415421682],
    ]
]

res_list = main_list.copy()
for i, main_i in enumerate(main_list):
    for j, main_i_j in enumerate(main_i):
        res_list[i][j] = [main_i_j[1] - main_i_j[0]]

為此使用numpy ,它使處理多維 arrays 變得更加容易並且效率更高(因為它是用 C 編寫的)。 首先,您必須安裝 numpy 然后,在您的代碼中導入它。 約定是將其作為 np 導入:

import numpy as np

接下來我們要將您的列表列表轉換為 numpy 數組。 如果您的不同ran_list具有不同的維度,您將必須獨立對待它們,這就是我在這里要做的。 (如果它們都具有相同的形狀,您可以將其視為一個 3 維數組。):

list_of_lists2 = []
for sub_list in lists_of_lists1:
    new_sub_list = np.array(sub_list)
    new_sub_list = new_sub_list[:,1] - new_sub_list[:,0]
    list_of_lists2.append(new_sub_list.tolist())

在這里,我將 numpy arrays 轉回嵌套列表,但如果您想繼續對它們進行計算,最好將它們保留為 numpy arrays。

這應該工作。 我們首先得到列表列表的每個元素(一個長度為2的列表),然后append后者列表(i)個元素之間的差異。

list = [[1, 23], [3, 2], [32, 213], [2321, 23]]
res_list = []
for i in list:
    res_list.append((i[1]-i[0]))

print(res_list)

暫無
暫無

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

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