我想将列表(alumnos)中的每个子列表都分隔在其他两个列表(rojo和azul)中,考虑名称是否在下一个子列表中,然后我想再创建两个具有各自值的列表。我是python的新手,我的最佳尝试是在下面,但是它不起作用。如果有人可以帮我,我将非常感激。
alumnos = [['Charlie', 'Fran', 'Lucas', 'Mario', 'Juan'], ['Mario', 'Juan'], ['Mario']]
values = [[3, 2.5, 2.8, 1, 1.2], [2, 2.5], [2.8]]
azul = []
rojo = []
azul_va = []
rojo_va = []
cont = 0
while cont<3:
for l in alumnos[cont]:
if l in alumnos[cont+1]:
rojo.append(l)
else:
azul.append(l)
cont += 1
print(f'{alumnos}')
print(rojo)
print(azul)
错误:列表索引超出范围。
输出(预期): rojo_va = [[1,1.2],[2]] azul_va = [[3,2.5,2.8],[2.5],[2.8]]
答案 0 :(得分:0)
为什么values
不在任何地方使用?如果您只是期望连续列表之间的公共值和非公共值,那么下面的代码应该可以工作。
alumnos = [['Charlie', 'Fran', 'Lucas', 'Mario', 'Juan'], ['Mario', 'Juan'], ['Mario']]
values = [[3, 2.5, 2.8, 1, 1.2], [2, 2.5], [2.8]]
azul = []
rojo = []
alumons_values = []
for l, r in zip(alumnos, values):
n = []
for l1, r1 in zip(l, r):
n.append((l1, r1))
alumons_values.append(n)
get_first = lambda t : list(map(lambda x : x[0], t))
get_second = lambda t : list(map(lambda x : x[1], t))
for l1, l2 in zip(alumons_values, alumons_values[1:]):
lm1 = get_first(l1)
lm2 = get_first(l2)
r = set(lm1) & set(lm2)
a = set(lm1) - set(lm2)
ri = [lm1.index(v) for v in lm1 if v in r]
ai = [lm1.index(v) for v in lm1 if v in a]
source = get_second(l1)
rojo.append([source[i] for i in ri])
azul.append([source[i] for i in ai])
print('Azul :', azul)
print('Rojo :', rojo)
输出:
Azul : [[3, 2.5, 2.8], [2.5]]
Rojo : [[1, 1.2], [2]]