[英]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])
我對i
和j
有點迷茫,我想我的方向是正確的,但我仍然做不到。 我會很感激一些幫助。 謝謝!
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.