Python中基於匹配項的子列表列表串聯
1、問題背景
給定一個列表列表,其中每個子列表代表一個物件,子列表的第一個和第二個元素是物件的幾何形狀和名稱,第三個元素是物件的z座標,第四個元素是物件的鍵區域。目標是將鍵區域匹配的子列表進行合併,並將合併後的子列表中的幾何形狀和名稱欄位組合成一個字串。
2、解決方案
以下程式碼實現了基於匹配項的子列表列表串聯:
import itertools
def merge_sublists( sublists):
"""
合併具有相同鍵區域的子列表。
Args:
sublists: 一個列表列表,其中每個子列表代表一個物件。
Returns:
一個合併後的子列表列表。
"""
# 建立一個字典來儲存鍵區域和子列表的對映。
key_region_to_sublists = {}
for sublist in sublists:
key_region = sublist[ 3]
if key_region not in key_region_to_sublists:
key_region_to_sublists[ key_region] = []
key_region_to_sublists[ key_region]. append( sublist)
# 建立一個新列表來儲存合併後的子列表。
merged_sublists = []
# 遍歷鍵區域字典。
for key_region, sublists in key_region_to_sublists. items():
# 如果鍵區域只有一個子列表,則將其新增到合併後的子列表中。
if len( sublists) == 1:
merged_sublists. append( sublists[ 0])
# 如果鍵區域有多個子列表,則將這些子列表合併成一個子列表。
else:
# 將子列表的幾何形狀和名稱欄位組合成一個字串。
geometry_fields = [ sublist[ 0] for sublist in sublists]
geometry_string = "{~}". join( geometry_fields)
name_fields = [ sublist[ 1] for sublist in sublists]
name_string = ";". join( name_fields)
# 將合併後的欄位新增到合併後的子列表中。
merged_sublists. append([ geometry_string, name_string] + sublists[ 0][ 2:])
# 返回合併後的子列表列表。
return merged_sublists
# 示例用法。
sublists = [[ 'Aquitards~:#>0', 'Aquitard 1', 1, '2', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>2', 'Aquitard 3', 1, '2', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>3', 'Aquitard 5', 1, '4', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>4', 'Aquitard 4', 1, '2', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>2', 'Aquitard 7', 1, '4', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>0', 'Aquitard 8', 1, '4', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>1', 'Aquitard 2', 1, '7', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>1', 'Aquitard 9', 1, '9', '', '', '', '', '', '', '', '', '', '', '']]
merged_sublists = merge_sublists( sublists)
for sublist in merged_sublists:
print( sublist)
輸出結果:
['Aquitards~:#>0}~{Aquitards~:#>2}~{Aquitards~:#>4', 'Aquitard 1;Aquitard 3;;Aquitard 5', 1, '2', '', '', '', '', '', '', '', '', '', '', '']
['Aquitards~:#>2}~{Aquitards~:#>0}~{Aquitards~:#>3', 'Aquitard 7;Aquitard 8;;Aquitard 4', 1, '4', '', '', '', '', '', '', '', '', '', '', '']
['Aquitards~:#>1', 'Aquitard 2', 1, '7', '', '', '', '', '', '', '', '', '', '', '']
['Aquitards~:#>1', 'Aquitard 9', 1, '9', '', '', '', '', '', '', '', '', '', '', '']
"基於匹配項的子列表列表串聯"指的是根據某些條件或標準將兩個列表中的子列表進行連線或組合。具體來說,假設有兩個列表,一個是主列表,其中包含多個子列表;另一個是匹配列表,包含一些與主列表中的子列表相關的項。現在的目標是,根據匹配列表中的項,將主列表中相應的子列表連線或組合成一個新的列表。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70034537/viewspace-3006677/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python基礎-列表操作(2):列表的遍歷和數字列表Python
- Python列表基礎Python
- Python中列表的方法Python
- python中的列表操作Python
- Python 基礎 2 - 列表Python
- Python基礎(03):列表Python
- Python中的列表詳解Python
- 子串匹配 BF法
- python的列表[]Python
- python基礎(三)——操作列表Python
- Python基礎 04----列表Python
- python中列表相加Python
- 基於 Generator 和 Iterator 的惰性列表
- python列表Python
- Python基礎學習3——列表Python
- python list列表基礎(元組)Python
- list列表運算子,列表元素的遍歷,列表的方法,生成列表,巢狀的列表|python自學筆記(四)巢狀Python筆記
- 【編測編學】零基礎學python_09_列表(操作列表之遍歷列表)Python
- Python中列表的深淺拷貝Python
- Python中列表和字串的反轉Python字串
- 30串聯所有單詞的子串
- 把一個列表拆成N個子列表的四種方法
- Python 列表(List)Python
- python列表(List)Python
- Python list(列表)Python
- Python-列表Python
- Python基礎——while、字串、列表及操作PythonWhile字串
- HTML <datalist> 選項列表HTML
- HTML datalist 選項列表HTML
- vue 列表渲染例項Vue
- 玩轉python字典與列表(中)Python
- python中列表如何去除重複Python
- 說說 Python 的列表Python
- Python刪除列表中的非字母字元Python字元
- Python的運算子的列表Python
- python基礎(四)----列表、字典練習題Python
- Python - 基礎資料型別 list 列表Python資料型別
- Python基礎之:數字字串和列表Python字串