【发布时间】:2017-09-22 10:50:14
【问题描述】:
我有这 2 个列表:
list1= [['user1', 186, 'Feb 2017, Apr 2017', 550, 555], ['user2', 282, 'Mai 2017', 0, 3579], ['user3', 281, 'Mai 2017', 10, 60]]
list2= [['user1', 186, 'Feb 2017, Mar 2017, Mai 2017', 0, 740],['user2', 282, 'Feb 2017', 0, 1000], ['user4', 288, 'Feb 2017', 60, 10]]
我想输出这个:
desiredlist =[['user1', 186, 'Feb 2017, Mar 2017, Mai 2017', 550, 740], ['user2', 282, 'Feb 2017', 0, 1000], ['user3', 281, 'Mai 2017', 10, 0], ['user4', 288, 'Feb 2017', 60, 10]]
为此我有这个功能:
def mergesafirmacheta(list1,list2):
desiredlist = []
for id, n1, dates, n2, n3 in list1:
counter = 0
for list_2 in list2:
if n1 == list_2[1]:
desiredlist.append(list_2[:3] + [n2, list_2[4]])
else:
counter += 1
if counter == len(list2):
desiredlist.append([id, n1, dates, n2, 0])
print (desiredlist)
但这只会输出这个:
desiredlist =[['user1', 186, 'Feb 2017, Mar 2017, Mai 2017', 550, 740], ['user2', 282, 'Feb 2017', 0, 1000], ['user3', 281, 'Mai 2017', 10, 0]]
^^ user4 丢失(检查我想要的输出),我可以从我的函数中看到为什么,我尝试在我的第一个 is 语句之后添加它:
elif list_2[1] != n1:
desiredlist.append(list_2)
但这不起作用,这是计算所需列表的规则:
当list2[1] == list1[1](示例186 == 186)附加到我的desiredlist list2[0], list2[1], list2[2], list1[3], list2[4] 时,如果list1[1] 不在list2 列表中,则更改附加到desiredlist list1[0], list1[1], list1[2], list1[3], 0, 并且如果@987654332不在list1 列表中的@ 附加到desiredlist list2[0], list2[1], list2[2], list2[3], list2[4]。这有点难以放松,但我认为检查我想要的输出和我现在实际输出的内容要容易得多。
【问题讨论】:
-
那么所有的“值”都应该来自第二个列表?我不太清楚你是如何合并输入的。
-
你为什么不用字典呢?
-
从两者中,在我想要的输出中有 user3(来自 list1 的原始文件)和 user4(来自 list2 的原始文件)
-
我很不清楚什么时候会从一个列表或另一个列表中结转一个值。例如,对于用户 1,
550取自第一个列表,740取自第二个列表。但是对于用户 2,第二个列表的1000胜过第一个列表的3579。为什么?!规则是什么?
标签: python python-3.x list