我有以下兩個串列
list_1 = [3, 5, 7, 2]
list_2 = [
'1-CHA', '2-NOF', '3-INC',
'4-CHA', '5-NOF', '6-NOF', '7-INC', '8-INC',
'9-INC', '10-INC', '11-CHA', '12-NOF', '13-CHA', '14-CHA', '15-INC',
'16-INC', '17-INC'
]
我想通過以下方式組合這兩個串列:
final_list = [
'1-CHA|2-NOF|3-INC',
'4-CHA|5-NOF|6-NOF|7-INC|8-INC',
'9-INC|10-INC|11-CHA|12-NOF|13-CHA|14-CHA|15-INC',
'16-INC|17-INC'
]
final_list - 應該與list_1具有相同的長度
uj5u.com熱心網友回復:
您可以創建一個迭代器,list_2以便您可以list_1通過呼叫next迭代器從串列中獲取指定次數的專案:
seq = iter(list_2)
final_list = ['|'.join(next(seq) for _ in range(n)) for n in list_1]
您也可以使用itertools.islice來避免重復呼叫next(感謝@gog 的建議):
from itertools import islice
seq = iter(list_2)
final_list = ['|'.join(islice(seq, 0, n)) for n in list_1]
要在不使用串列推導或生成器運算式的情況下執行此操作,您可以創建一個空串列并將專案附加到其中:
seq = iter(list_2)
final_list = []
for n in list_1:
items = []
for _ in range(n):
items.append(next(seq))
final_list.append('|'.join(items))
演示:https ://replit.com/@blhsing/BlandEssentialJavadoc
uj5u.com熱心網友回復:
你可以這樣做:
final_list = [
# Join with a `|` pipe character
'|'.join(
# Slice list 2
list_2[
# Start at the sum of values less than i then sum of values including i
sum(list_1[:i]):sum(list_1[:i 1])])
for i in range(len(list_1))
]
一行:
final_list = ['|'.join(list_2[sum(list_1[:i]):sum(list_1[:i 1])]) for i in range(len(list_1))]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/518393.html
標籤:Python列表列表理解
