![](/img/trans.png)
[英]How can I combine many string lists (from a text file) into one master list of integers?
[英]How to combine a string list with a list of lists of integers
我想結合以下字符串列表和列表的整數列表:
lst = ['A',
'A',
'B',
'C',
'C',
'D',
'D',
'D',....]
lst_of_lst = [[9, 10, 11, 12],
[54, 55, 56],
[72, 73, 74, 75, 76],
[1, 2, 3, 4, 5],
[98, 99, 100],
[13, 14],
[21, 22, 23],
[27, 28, 29, 30], ....]
從而返回元組列表:
lst_tups = [('A', 9), ('A', 10), ('A', 11), ('A', 12),
('A', 54), ('A', 55), ('A', 56),
('B', 72), ('B', 73), ('B', 74), ('B', 75), ('B', 76),
('C', 1), ('C', 2), ('C', 3), ('C', 4), ('C', 5),
('C', 98), ('C', 99), ('C', 100),
('D', 13), ('D', 14),
('D', 21), ('D', 22), ('D', 23),
('D', 27), ('D', 28), ('D', 29), ('D', 30), ....]
這 2 個列表具有相同數量的列表元素(在上面的測試用例中 - 8)。 不幸的是,由於lst
重復字符串條目,使用字典策略是lst
。
我嘗試了以下方法,它僅適用於lst_of_lst
中每個子列表的第一個元素,並且對lst
每個字符串重復:
empty_test_combo = []
for x in helix_chain_id:
for y in helix_seq_res_num_ranges:
empty_test_combo += (zip(x, y))
我也試過:
lst_tups = []
for x in lst:
for y in lst_of_lst:
for z in y:
lst_tups.append(zip(x, [z]))
這似乎是最有希望的選擇。 它返回一個元組列表,這些元組正確地組合了lst
字符串和lst_of_lst
整數列表,但只是部分組合。
您嘗試使用zip
的方式似乎存在誤解。
zip(list1, list2)
是一個迭代器。 當你迭代它時,你會得到元組:第一個由list1
的第一項和list2
的第一項組成,依此類推。
您在這里要做的是zip(lst, lst_of_lst)
以便將lst
每個元素與lst_of_lst
的相應子列表lst_of_lst
。 從每一對中,您可以生成所需的輸出。
您可以使用列表理解來做到這一點:
lst = ['A', 'A', 'B', 'C', 'C', 'D', 'D', 'D',]
lst_of_lst = [[9, 10, 11, 12],
[54, 55, 56],
[72, 73, 74, 75, 76],
[1, 2, 3, 4, 5],
[98, 99, 100],
[13, 14],
[21, 22, 23],
[27, 28, 29, 30],]
out = [(item1, item2) for item1, sublist in zip(lst, lst_of_lst) for item2 in sublist]
print(out)
# [('A', 9), ('A', 10), ('A', 11), ('A', 12), ('A', 54), ('A', 55), ('A', 56),
# ('B', 72), ('B', 73), ('B', 74), ('B', 75), ('B', 76), ('C', 1), ('C', 2), ('C', 3), ('C', 4), ('C', 5),
# ('C', 98), ('C', 99), ('C', 100), ('D', 13), ('D', 14), ('D', 21), ('D', 22), ('D', 23),
# ('D', 27), ('D', 28), ('D', 29), ('D', 30)]
或者,用循環編寫,正如您所嘗試的:
out = []
for item1, sublist in zip(lst, lst_of_lst):
for item2 in sublist:
out.append((item1, item2))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.