我試圖從嵌套串列的一個位置提取相同的值,并從另一個位置提取相應的值。
JJ = [['HC', 0, ' 3.6'],
['HC', 1, ' 3.9'],
['HC', 2, ' 7.0'],
['NC', 7, ' 0.3'],
['NC', 8, ' 0.4'],
['NC', 9, ' 0.5'],
['NC', 10, ' 0.6'],
['NC', 11, ' 0.7'],
['DC', 12, ' 0.8'],
[['DC','NC'], 13, ' 0.9']]
這是一個串列,其中第一個元素在某些子串列中重復。我正在嘗試撰寫一個代碼,該代碼將從每個子串列中獲取所有第三個元素,并使用兩個串列將其與其對應的第一個元素映射。忽略第二個元素。所需的輸出應該是:
list1 = [['HC'],['NC'],['DC'],['DC','NC']]
list2 = [[3.6, 3.9, 7], [0.3, 0.4, 0.5, 0.6, 0.7],[0.8],[0.9]]
其中現在的每個元素list1
對應于 中相同位置的元素list2
,或者可以是字典映射。我試過這個:
list1 = []
list2 = []
for i in range(0,len(JJ)-1):
#i_set = set(i)
#for j in range(len(i)):
if JJ[i][0] == JJ[i 1][0]:
list1.append(JJ[i][0])
list2.append(JJ[i][2])
list1 = set(list1)
這一次又一次地給了我相同的元素list1
,如果我將它轉換為一個集合,元素之間的映射/對應就會丟失。此外,由于最后一個元素是len(JJ)-1
(不減去 1 代碼顯示索引錯誤),我無法收集最后一個元素。有沒有其他方法可以做到這一點?
uj5u.com熱心網友回復:
使用簡單的 for 回圈:基本思想是跟蹤前一個第一個元素和當前第一個元素,如果不同,則將一個新串列附加到list1
and list2
。
list1 = []
list2 = []
prev = curr = None
for sublist in JJ:
curr = sublist[0]
if curr != prev:
list1.append([curr])
list2.append([])
list2[-1].append(float(sublist[2]))
prev = curr
groupby
從itertools
模塊可能有用
from itertools import groupby
JJ = [['HC', 0, ' 3.6'], ['HC', 1, ' 3.9'], ['HC', 2, ' 7.0'], ['NC', 7, ' 0.3'],
['NC', 8, ' 0.4'], ['NC', 9, ' 0.5'], ['NC', 10, ' 0.6'], ['NC', 11, ' 0.7'],
['DC', 12, ' 0.8'], [['DC','NC'], 13, ' 0.9']]
list1, list2 = [], []
# groupby the first elements in the inner lists
for key, group in groupby(JJ, lambda x: x[0]):
# append keys as lists
list1.append(key if isinstance(key, list) else [key])
# append the last element of the sublists
list2.append([float(e[-1]) for e in group])
print(list1)
# [['HC'], ['NC'], ['DC'], ['DC', 'NC']]
print(list2)
# [[3.6, 3.9, 7.0], [0.3, 0.4, 0.5, 0.6, 0.7], [0.8], [0.9]]
uj5u.com熱心網友回復:
您可以這樣做,而無需任何額外的匯入:
JJ = [['HC', 0, ' 3.6'],
['HC', 1, ' 3.9'],
['HC', 2, ' 7.0'],
['NC', 7, ' 0.3'],
['NC', 8, ' 0.4'],
['NC', 9, ' 0.5'],
['NC', 10, ' 0.6'],
['NC', 11, ' 0.7'],
['DC', 12, ' 0.8'],
[['DC','NC'], 13, ' 0.9']]
dict_ = {}
for k, _, n in JJ:
if isinstance(k, list):
k = tuple(k)
dict_.setdefault(k, []).append(float(n))
list1 = []
list2 = []
for k, v in dict_.items():
if isinstance(k, tuple):
k = list(k)
list1.append(k)
list2.append(v)
print(list1)
print(list2)
輸出:
['HC', 'NC', 'DC', ['DC', 'NC']]
[[3.6, 3.9, 7.0], [0.3, 0.4, 0.5, 0.6, 0.7], [0.8], [0.9]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/490562.html
上一篇:如何使用標記元素拆分串列?
下一篇:將2個串列隨機分配到另外2個串列