我有这两个清单列表:
list1 = [['A', 14, 'I', 10, 20], ['B', 15, 'S', 30, 40], ['C', 16, 'F', 50, 60]]
list2 = [['A', 14, 'Y', 0, 200], ['B', 15, 'M', 0, 400], ['C', 17, 'G', 0, 600]]
(这只是一个只有3个列表的示例,我有更多列表,但它们采用完全相同的格式并应用相同的规则)
这将是我想要的输出:
finalList = [['A', 14, 'Y', 10, 200], ['B', 15, 'M', 30, 400], ['C', 16, 'F', 50, 60],['C', 17, 'G', 0, 600]]
这是我计算finalList的原则:
当list1[listindex][1] == list2[listindex][1]
(例如:14 = 14时),请替换为list1 -> list2[2]
和list2[4]
(例如:' Y'和200),如果不是将list2中不匹配的列表原样添加到list1(就像在我想要的输出中一样),并保持list1中不匹配的列表(例如:['C', 16, 'F', 50, 60]
)。
我如何在python 3函数中执行此操作?我想要一个简单而直接的功能。非常感谢你的时间!
答案 0 :(得分:1)
您可以在函数中使用if
语句来应用所有规则。
def custom_merge(list1, list2):
finalList = []
for sub1, sub2 in zip(list1, list2):
if sub1[1]==sub2[1]:
out = sub1.copy()
out[2] = sub2[2]
out[4] = sub2[4]
finalList.append(out)
else:
finalList.append(sub1)
finalList.append(sub2)
return finalList
答案 1 :(得分:0)
以下是使用列表理解进行此操作的一种方法:
public class Request {
Event event;
Gallery gallery;
List<Activity> activity;
}
匹配案例的内部列表的构造使其略微不可读。它可以通过 for 循环以“deflattened”形式显示:
lst = [i for x, y in zip(list1, list2)
for i in (([*x[:2], y[2], x[3], y[4]],) if x[1] == y[1] else (x, y))]
print(lst)
# [['A', 14, 'Y', 10, 200], ['B', 15, 'M', 30, 400], ['C', 16, 'F', 50, 60], ['C', 17, 'G', 0, 600]]
答案 2 :(得分:0)
要同时处理这两个列表,您可以使用zip()
Docs Here
例如:
for value in zip(list1, list2):
print (value[0], value[1])
将返回:
['A', 14, 'I', 10, 20] ['A', 14, 'Y', 0, 200]
['B', 15, 'S', 30, 40] ['B', 15, 'M', 0, 400]
['C', 16, 'F', 50, 60] ['C', 17, 'G', 0, 600]
所以使用zip你可以同时在你的两个列表上工作。
答案 3 :(得分:0)
这是将列表转换为字典的一种方法,并利用EVENT TYPE=KEYPRESS CHAR="a" MODIFIERS="ctrl"
EVENT TYPE=KEYPRESS CHAR="c" MODIFIERS="ctrl"
WAIT SECONDS=1
URL GOTO=javascript:(function(){var<SP>t=document.createElement("input");t.setAttribute("id","tempInput");document.body.appendChild(t);})();
EVENT TYPE=CLICK SELECTOR="#tempInput" BUTTON=0
URL GOTO=javascript:(function(){var<SP>t=document.querySelector("#tempInput");document.body.removeChild(t);})();
中重叠项目只会覆盖其list2
对应项的事实:
list1
如果列表的排序很重要,您可以在最后排序或使用OrderedDict首先创建合并。
答案 4 :(得分:0)
你的加入&#34;算法可以独立地处理每个项目,并且很简单:
def join_list(item1, item2):
if item1[1] == item2[1]:
result = item1[:]
result[2] = item2[2]
result[4] = item2[4]
return (result,)
return item1[:], item2[:]
此函数总是返回元组:单元格中的单例或一般情况下的情侣。
您可以使用list1
功能将此功能应用于您的两个列表list2
和map()
。但结果将是一个元组列表(实际上是Python 3中的生成器),因此您需要展平结果:
list1 = [['A', 14, 'I', 10, 20], ['B', 15, 'S', 30, 40], ['C', 16, 'F', 50, 60]]
list2 = [['A', 14, 'Y', 0, 200], ['B', 15, 'M', 0, 400], ['C', 17, 'G', 0, 600]]
joined = [x
for row in map(join_list, list1, list2)
for x in row]
print(joined)
你得到了你所期望的。