在python中拆分字符串列表并将它们重新排列成一系列列表



列表'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"按以下方式分为4个列表——a_ot1、a_ot2、a_ot3和a_ot4:

a_out1 = ['Lisa', 'Joe', 'Ana', 'Paul'] 
a_out2 = ['Gail', 'Roderick', 'Patricia']
a_out3 = ['Jonathan', 'Jim', 'Jennifer'] 
a_out4 = ['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_out1 = ['Elizabeth', 'Tanya', 'Jim', 'Will', 'Rob', 'Joe']
a_out2 = ['Abby', 'Robin', 'Natasha', 'Frank', 'Ana', 'Jennifer']
a_out3 = ['John', 'Jeff', 'Rick', 'Steve'] 
a_out4 = ['Alexa', 'Roger', 'Adam', 'Paul', 'James', 'Kara']

如何使用python列表获得这样的结果?

这里有一个脚本可以做到这一点:

v = [['Elisa', 'Liza', 'Izabela', 'Elisabeth', 'Elizabeth', 'Lisa', 'Lizzy', 'Isabella', 'Isabelle', 'Isabela', 'Liz'],
['Abbey', 'Abbie', 'Abigail', 'Abby', 'Gail'],
['Jonathan', 'Jon', 'John', 'Jonny', 'Johnny', 'Nathan'],
['Alejandra','Alexandra','Alexis','Alya','Alexa','Lexi','Allie','Ally']]
a = ['Jonathan', 'Jim', 'Jennifer', 'Alya', 'Renee', 'Natasha', 'Phil', 'Lisa', 'Joe', 'Ana', 'Paul', 'Gail', 'Roderick', 'Patricia']
# a = ['Abby', 'Robin', 'Natasha', 'Frank', 'Ana', 'Jennifer', 'Elizabeth', 'Tanya', 'Jim', 'Will', 'Rob', 'Joe', 'Alexa', 'Roger', 'Adam', 'Paul', 'James', 'Kara', 'John', 'Jeff', 'Rick', 'Steve']
which = {w:i for i in range(len(v)) for w in v[i]}
a_out = [[] for _ in v]
idx = 0
for w in a:
idx = which.get(w,idx)
a_out[idx].append(w)

请注意,子列表v[0], v[1], v[2], v[3]是您的参考列表v1、v2、v3、v4。类似地,a_out的子列表是您想要的输出。例如,运行上面的,然后运行for r in a_out: print(r)会产生

['Lisa', 'Joe', 'Ana', 'Paul']
['Gail', 'Roderick', 'Patricia']
['Jonathan', 'Jim', 'Jennifer']
['Alya', 'Renee', 'Natasha', 'Phil']

最新更新