列表“v1”、“v2”、“v3”和“v4”是标准列表。
v1 = ['Elisa', 'Liza', 'Izabela', 'Elisabeth', 'Elizabeth', 'Lisa', 'Lizzy', 'Isabella', 'Isabelle', 'Isabela', 'Liz']
v2 = ['Abbey', 'Abbie', 'Abigail', 'Abby', 'Gail']
v3 = ['Jonathan', 'Jon', 'John', 'Jonny', 'Johnny', 'Nathan']
v4 = ['Alejandra','Alexandra','Alexis','Alya','Alexa','Lexi','Allie','Ally']
列表“a”作为输入给出:
a = ['Jonathan', 'Jim', 'Jennifer', 'Alya', 'Renee', 'Natasha', 'Phil', 'Lisa', 'Joe', 'Ana', 'Paul', 'Gail', 'Roderick', 'Patricia']
每个标准列表中始终只有一个值出现在列表“a”中的任何位置。 预期的输出是一个列表,其中包含按列表“a”中的值分区的值集,这些值来自列表“v1”、“v2”、“v3”、“v4”。这些集合的位置将按照 'v1' 值集 -> 'v2' 值集 -> 'v3' 值集 -> 'v4' 值集的顺序重新排列
预期输出
a_out = ['Lisa', 'Joe', 'Ana', 'Paul', 'Gail', 'Roderick', 'Patricia', 'Jonathan', 'Jim', 'Jennifer', 'Alya', 'Renee', 'Natasha', 'Phil']
分区和设置引用图像 -
示例 2:
输入
a = ['Abby', 'Robin', 'Natasha', 'Frank', 'Ana', 'Jennifer', 'Elizabeth', 'Tanya', 'Jim', 'Will', 'Rob', 'Joe', 'Alexa', 'Roger', 'Adam', 'Paul', 'James', 'Kara', 'John', 'Jeff', 'Rick', 'Steve']
预期输出
a_out = ['Elizabeth', 'Tanya', 'Jim', 'Will', 'Rob', 'Joe', 'Abby', 'Robin', 'Natasha', 'Frank', 'Ana', 'Jennifer', 'John', 'Jeff', 'Rick', 'Steve', 'Alexa', 'Roger', 'Adam', 'Paul', 'James', 'Kara']
分区和设置引用图像 -
如何使用Python列表获得这样的结果?
最佳答案
尝试:
tmp = {}
for i, lst in enumerate([v1, v2, v3, v4], 1):
for w in lst:
tmp[w] = i
a_new, last = [], 0
for i, w in enumerate(a):
last = tmp.get(w, last)
a_new.append(last)
print([w for w, _ in sorted(zip(a, a_new), key=lambda k: k[1])])
打印:
['Lisa', 'Joe', 'Ana', 'Paul', 'Gail', 'Roderick', 'Patricia', 'Jonathan', 'Jim', 'Jennifer', 'Alya', 'Renee', 'Natasha', 'Phil']
注意:如果在 v1/v2/v3 或 v4 中找不到名字,则会将其放置在输出列表的开头。
关于python - 如何在 python 中使用一组列表来分区和重新排列列表值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73587323/