如[[0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 5, 6, 7], [1, 2, 3, 4, 6, 7, 9, 3, 6, 8, 9, 8, 9, 6, 7, 8, 9, 8, 8]],要变成[(0, [1, 2, 3]), (1, [0, 4, 6, 7, 9]), (2, [0, 3, 6, 8, 9]), (3, [0, 2, 8, 9]), (4, [1, 6, 7, 8]),(5, [9]), (6, [1, 2, 4, 8]), (7, [1, 4, 8]), (8, [2, 3, 4, 6, 7]), (9, [1, 2, 3, 5])]
这个问题好像不是第一次问了,我2次看了半天还是搞不懂什么关系
def unique_index(L,e):
return [i for i in range(len(L)) if L[i]==e]
a=[[0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 5, 6, 7], [1, 2, 3, 4, 6, 7, 9, 3, 6, 8, 9, 8, 9, 6, 7, 8, 9, 8, 8]]
list1=a[0]
list2=a[1]
element=list(set(list1+list2)) ##去重
l=[]
for i in range(len(element)):
k = []
k.append(element[i])
l.append(k)
list1_i=unique_index(list1,i)##元素位置
list2_i=unique_index(list2,i)##元素位置
x=[]
for n in list1_i:
x.append(list2[n])
l[i].append(x)
for m in list2_i:
l[i][1].append(list1[m])
print(l)
我看了半天解决这个问题可以分为两步:
1,先根据数字在第二个列表的位置找第一个列表的数
2,再根据第一个列表数字位置找第二个
代码如下:
# 1,先根据数字在第二个列表的位置找第一个列表的数
# 2,再根据第一个列表数字位置找第二个
# 代码如下:
li = [[0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 5, 6, 7],
[1, 2, 3, 4, 6, 7, 9, 3, 6, 8, 9, 8, 9, 6, 7, 8, 9, 8, 8]]
# 我将它封装成了一个方法,这个方法要传两个参数(总列表和要查询的数字)
def select_list(list, num):
# 遍历第二个列表中的数字和位置
list_finally = []
for ind, ls2 in enumerate(list[1]):
# 和要查询的数字进行比对
if num == ls2:
# 根据获取的索引取第一个列表的数,并放入list_finally里面
list_finally.append(list[0][ind])
for ind, ls1 in enumerate(list[0]):
# 继续和要查询的数字进行比对
if num == ls1:
# 根据获取的索引取第一个列表的数,并放入list_finally里面
list_finally.append(list[1][ind])
# 最后返回列表
return list_finally