我有两个列表,其中一个列表是元组列表(将称为list2),另一个列表是字符串列表(将称为list1)。
list1比list2小,但我希望能够循环遍历它们,并在每个元组(即list2中)中比较来自list1的值。
到目前为止,我一直在设法取得结果,但它没有按照正确的顺序。
到目前为止我的代码是;
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_list和list1的len是不同的,它们应该是相同的。但也可以看出,new_list的顺序与list1值不匹配,因此,例如,new_list的索引3的值实际上应该在索引10,我不知道为什么它似乎要重新排序new_list。
我期望得到的输出是new_list和list1,它们的长度相同,但也有相应的值,因此,如果ii in y是true,而ii是2018-14,那么当考虑new_list和list1的索引10时,值应该分别是3和2018-14,如果考虑new_list和list1的索引0,那么值应该分别为0和d25。
预期产出的全部细目列于下文;
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]发布于 2018-06-11 13:59:56
假设list2的第三个元素中没有重复,我倾向于将它们放入一个将日期映射到数字的字典中。然后,您可以遍历list1并从字典中获取这些数字,如果日期不存在,则使用0作为回退值。
d = {description.split(' ')[2]: number for number, _, description in list2}
result = [d.get(date, 0) for date in list1]
print(result)结果:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 1]发布于 2018-06-11 12:18:45
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))发布于 2018-06-11 13:59:40
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的第一行。
https://stackoverflow.com/questions/50797275
复制相似问题