首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环遍历两个列表,其中一个比另一个小。

循环遍历两个列表,其中一个比另一个小。
EN

Stack Overflow用户
提问于 2018-06-11 12:02:19
回答 4查看 82关注 0票数 0

我有两个列表,其中一个列表是元组列表(将称为list2),另一个列表是字符串列表(将称为list1)。

list1list2小,但我希望能够循环遍历它们,并在每个元组(即list2中)中比较来自list1的值。

到目前为止,我一直在设法取得结果,但它没有按照正确的顺序。

到目前为止我的代码是;

代码语言:javascript
复制
list1 = ['2018-24', '2018-23', '2018-22', '2018-21', '2018-20', '2018-19', '2018-18', '2018-17', '2018-16', '2018-15', '2018-14', '2018-13', '2018-12', '2018-11']

list2 = [(27, 'Deutsche Bank', 'Opportunities email 2018-7'), (5, 'Deutsche Bank', 'Opportunities email 2018-2'), (4, 'Deutsche Bank', 'Opportunities email 2018-6'), (3, 'Deutsche Bank', 'Opportunities email 2018-10'), (3, 'Deutsche Bank', 'Opportunities email 2018-14'), (3, 'Deutsche Bank', 'Opportunities email 2017-50'), (3, 'Deutsche Bank', 'Opportunities email 2018-12'), (3, 'Deutsche Bank', 'Opportunities email 2018-4'), (2, 'Deutsche Bank', 'Opportunities email 2018-5'), (2, 'Deutsche Bank', 'Opportunities email 2018-3'), (2, 'Deutsche Bank', 'Opportunities email 2017-51'), (1, 'Deutsche Bank', 'Opportunities email 2018-13'), (1, 'Deutsche Bank', 'Opportunities email 2018-11')]

new_list = []

for x in list2:
    ii = x[2].split(' ')[2]
    if ii not in list1:
        new_list.append(0)
    else:

        print('This is ii ' + ii)
        for y in list1:
            if ii in y:
                new_list.append(x[0]) 
print(new_list)
print(len(new_list))
print(len(list1))
o/p > 
'This is ii 2018-14'
'This is ii 2018-13'
'This is ii 2018-12'
'This is ii 2018-11'
[0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 1, 1]
13
14

上面可以看到,new_listlist1的len是不同的,它们应该是相同的。但也可以看出,new_list的顺序与list1值不匹配,因此,例如,new_list的索引3的值实际上应该在索引10,我不知道为什么它似乎要重新排序new_list

我期望得到的输出是new_listlist1,它们的长度相同,但也有相应的值,因此,如果ii in y是true,而ii2018-14,那么当考虑new_listlist1的索引10时,值应该分别是32018-14,如果考虑new_listlist1的索引0,那么值应该分别为0d25。

预期产出的全部细目列于下文;

代码语言:javascript
复制
list1 = ['2018-24', '2018-23', '2018-22', '2018-21', '2018-20', '2018-19', '2018-18', '2018-17', '2018-16', '2018-15', '2018-14', '2018-13', '2018-12', '2018-11']

new_list = [0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 3, 1, 3, 1]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-11 13:59:56

假设list2的第三个元素中没有重复,我倾向于将它们放入一个将日期映射到数字的字典中。然后,您可以遍历list1并从字典中获取这些数字,如果日期不存在,则使用0作为回退值。

代码语言:javascript
复制
d = {description.split(' ')[2]: number for number, _, description in list2}
result = [d.get(date, 0) for date in list1]
print(result)

结果:

代码语言:javascript
复制
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 1]
票数 1
EN

Stack Overflow用户

发布于 2018-06-11 12:18:45

代码语言:javascript
复制
list1 = ['2018-24', '2018-23', '2018-22', '2018-21', '2018-20', '2018-19', '2018-18', '2018-17', '2018-16', '2018-15', '2018-14', '2018-13', '2018-12', '2018-11']
list2 = [(27, 'Deutsche Bank', 'Opportunities email 2018-7'), (5, 'Deutsche Bank', 'Opportunities email 2018-2'), (4, 'Deutsche Bank', 'Opportunities email 2018-6'), (3, 'Deutsche Bank', 'Opportunities email 2018-10'), (3, 'Deutsche Bank', 'Opportunities email 2018-14'), (3, 'Deutsche Bank', 'Opportunities email 2017-50'), (3, 'Deutsche Bank', 'Opportunities email 2018-12'), (3, 'Deutsche Bank', 'Opportunities email 2018-4'), (2, 'Deutsche Bank', 'Opportunities email 2018-5'), (2, 'Deutsche Bank', 'Opportunities email 2018-3'), (2, 'Deutsche Bank', 'Opportunities email 2017-51'), (1, 'Deutsche Bank', 'Opportunities email 2018-13'), (1, 'Deutsche Bank', 'Opportunities email 2018-11')]
new_list = []

for x in range(len(list1)):
    try:
        ii = list2[x][2].split(' ')[2]
        if ii not in list1:
            new_list.append(0)
        else:

            print('This is ii ' + ii)
            for y in list1:
                if ii in y:
                    new_list.append(list2[x][0])
    except IndexError:
        new_list.append(0)
print(new_list)
print(len(new_list))
print(len(list1))
print(len(list2))
票数 0
EN

Stack Overflow用户

发布于 2018-06-11 13:59:40

代码语言:javascript
复制
list1 = ['2018-24', '2018-23', '2018-22', '2018-21', '2018-20', '2018-19', '2018-18', '2018-17', '2018-16', '2018-15', '2018-14', '2018-13', '2018-12', '2018-11']

list2 = [(27, 'Deutsche Bank', 'Opportunities email 2018-7'), (5, 'Deutsche Bank', 'Opportunities email 2018-2'), (4, 'Deutsche Bank', 'Opportunities email 2018-6'), (3, 'Deutsche Bank', 'Opportunities email 2018-10'), (3, 'Deutsche Bank', 'Opportunities email 2018-14'), (3, 'Deutsche Bank', 'Opportunities email 2017-50'), (3, 'Deutsche Bank', 'Opportunities email 2018-12'), (3, 'Deutsche Bank', 'Opportunities email 2018-4'), (2, 'Deutsche Bank', 'Opportunities email 2018-5'), (2, 'Deutsche Bank', 'Opportunities email 2018-3'), (2, 'Deutsche Bank', 'Opportunities email 2017-51'), (1, 'Deutsche Bank', 'Opportunities email 2018-13'), (1, 'Deutsche Bank', 'Opportunities email 2018-11')]

new_list = [0]*len(list1)

for x in list2:
    i = x[2].split(' ')[2]
    if i in list1:
        new_list[list1.index(i)] = x[0]

print(new_list) #[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 1]

尝试将new_list初始化为0的列表,然后使用带有新值的.index(value)查找将其放在new_list中的索引,这不是最优化的处理方法,但它应该完成任务。

你为什么要这样把它藏起来。在我看来,您可能希望将new_list的值映射回list1,以便进行某种查找。如果是这样的话,您可能需要考虑使用字典来查找键值对,它会更快更好,这是Kevin's answer的第一行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50797275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档