为了账号安全,请及时绑定邮箱和手机立即绑定

如何将字符串列表与整数列表列表相结合

如何将字符串列表与整数列表列表相结合

慕桂英546537 2021-08-14 20:58:51
我想结合以下字符串列表和列表的整数列表: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.我尝试了以下方法,它仅适用于 in 中的每个子列表的第一个元素,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整数列表的元组列表,但只是部分组合。
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您尝试使用的方式似乎存在误解zip。


zip(list1, list2)是一个迭代器。当您对其进行迭代时,您会得到元组:第一个由 的第一项list1和 的第一项组成list2,依此类推。


您在这里要做的是将 的zip(lst, lst_of_lst)每个元素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))


查看完整回答
反对 回复 2021-08-14
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号