使用python中另一个列表的内容重新排列列表
我有两张单子使用python中另一个列表的内容重新排列列表,python,string,Python,String,我有两张单子 list_a = ['an378j', 'an378jijm', 'fg453h', 'fg453hbrd'] list_b = ['fg453h2564677sakjh', 'an378jijm564456464ewf', 'fg453hbrd8968764ewf', 'an378j86764edwf'] 注意:列表列表a的前几个字符与列表列表b的前几个字符相同 我需要根据顺序重新排列ListList\u b,匹配的字符被放置在ListList\u a中 因此,新的清单应该是
list_a = ['an378j', 'an378jijm', 'fg453h', 'fg453hbrd']
list_b = ['fg453h2564677sakjh', 'an378jijm564456464ewf', 'fg453hbrd8968764ewf', 'an378j86764edwf']
注意:列表列表a
的前几个字符与列表列表b
的前几个字符相同
我需要根据顺序重新排列ListList\u b
,匹配的字符被放置在ListList\u a
中
因此,新的清单应该是:
['an378j86764edwf', 'an378jijm564456464ewf', 'fg453h2564677sakjh', 'fg453hbrd8968764ewf']
我的解决方案:
A = ['an378j', 'an378jijm', 'fg453h', 'fg453hbrd']
B = ['fg453h2564677sakjh', 'an378jijm564456464ewf', 'fg453hbrd8968764ewf', 'an378j86764edwf']
tmp_A = A.copy()
def get_pair(b_val):
# All possible pairs from A for b_el:
possible_pairs = [val for i, val in enumerate(tmp_A) if b_val.startswith(val)]
# Longest of possible pairs is pair we should use:
pair = sorted(possible_pairs, key=len, reverse=True)[0]
# Pair we use can't be used again:
tmp_A.pop(tmp_A.index(pair))
# Return:
return pair
# Index of pair is key to sort:
res = sorted(B, key=lambda b_val: A.index(get_pair(b_val)))
print(res)
# ['an378j86764edwf', 'an378jijm564456464ewf', 'fg453h2564677sakjh', 'fg453hbrd8968764ewf']
对于不同的输入:
A = ['an378j', 'an378jijm', 'fg453h', 'fg453hbrd', 'an']
B = ['fg453h2564677sakjh', 'an378jijm564456464ewf', 'fg453hbrd8968764ewf', 'an378j86764edwf', 'an378j']
# ['an378j86764edwf', 'an378jijm564456464ewf', 'fg453h2564677sakjh', 'fg453hbrd8968764ewf', 'an378j']
我的解决方案:
A = ['an378j', 'an378jijm', 'fg453h', 'fg453hbrd']
B = ['fg453h2564677sakjh', 'an378jijm564456464ewf', 'fg453hbrd8968764ewf', 'an378j86764edwf']
tmp_A = A.copy()
def get_pair(b_val):
# All possible pairs from A for b_el:
possible_pairs = [val for i, val in enumerate(tmp_A) if b_val.startswith(val)]
# Longest of possible pairs is pair we should use:
pair = sorted(possible_pairs, key=len, reverse=True)[0]
# Pair we use can't be used again:
tmp_A.pop(tmp_A.index(pair))
# Return:
return pair
# Index of pair is key to sort:
res = sorted(B, key=lambda b_val: A.index(get_pair(b_val)))
print(res)
# ['an378j86764edwf', 'an378jijm564456464ewf', 'fg453h2564677sakjh', 'fg453hbrd8968764ewf']
对于不同的输入:
A = ['an378j', 'an378jijm', 'fg453h', 'fg453hbrd', 'an']
B = ['fg453h2564677sakjh', 'an378jijm564456464ewf', 'fg453hbrd8968764ewf', 'an378j86764edwf', 'an378j']
# ['an378j86764edwf', 'an378jijm564456464ewf', 'fg453h2564677sakjh', 'fg453hbrd8968764ewf', 'an378j']
非常详细,但它做你想要的
list_a = ['an378j', 'an378jijm', 'fg453h', 'fg453hbrd']
list_b = ['fg453h2564677sakjh', 'an378jijm564456464ewf', 'fg453hbrd8968764ewf', 'an378j86764edwf']
sorted_b = []
grouped_b = {}
for item_a in list_a:
for item_b in list_b:
if item_b.startswith(item_a):
if item_a not in grouped_b:
grouped_b[item_a] = [item_b]
else:
grouped_b[item_a].append(item_b)
for item in sorted(grouped_b[item_a]):
if item not in sorted_b:
sorted_b.append(item)
print sorted_b
['an378j86764edwf'、'AN378JIJM5644564464EWF'、'FG453H256677SAKJH',
'fg453hbrd8968764ewf']
非常详细,但它做你想要的
list_a = ['an378j', 'an378jijm', 'fg453h', 'fg453hbrd']
list_b = ['fg453h2564677sakjh', 'an378jijm564456464ewf', 'fg453hbrd8968764ewf', 'an378j86764edwf']
sorted_b = []
grouped_b = {}
for item_a in list_a:
for item_b in list_b:
if item_b.startswith(item_a):
if item_a not in grouped_b:
grouped_b[item_a] = [item_b]
else:
grouped_b[item_a].append(item_b)
for item in sorted(grouped_b[item_a]):
if item not in sorted_b:
sorted_b.append(item)
print sorted_b
['an378j86764edwf'、'AN378JIJM5644564464EWF'、'FG453H256677SAKJH',
'fg453hbrd8968764ewf']
列表中的元素是字符串吗?你试过什么吗?问题比看起来更有趣:简单的
排序(B,key=lambda el:next(i代表i,v在枚举(A)中,如果el.startswith(v))
不起作用,因为an378j
使用了两次,而an378jijm
从不。看看过滤器(startswith,B)
在对a
@Brad的理解中。请修正您的问题以指示字符串。现在你有变量名或者只是语法无效。列表中的元素是字符串吗?你尝试过什么吗?问题比看起来更有趣:简单的排序(B,key=lambda el:next(如果el.startswith(v))
不起作用,因为an378j
使用了两次,而an378jijm
从不。在理解a
@Brad时,查看过滤器(startswith,B)
。请修正您的问题以指示字符串。现在您有变量名或语法无效。您的解决方案无法处理此数据:A=['an378j','an378jijm','fg453h','fg453hbrd','an']
<代码>B=['FG453H256677SAKJH','AN378JIJM5644564464EWF','fg453hbrd8968764ewf','an378j86764edwf','an378j'];输出:['an378j'、'an378j86764edwf'、'AN378JIJM5644564464EWF'、'FG453H256677SAKJH'、'fg453hbrd8968764ewf']
-查看最后一个元素。谢谢大家。给出的解决方案非常有效。您的解决方案不适用于此数据:a=['an378j','an378jijm','fg453h','fg453hbrd','an']
<代码>B=['FG453H256677SAKJH','AN378JIJM5644564464EWF','fg453hbrd8968764ewf','an378j86764edwf','an378j'];输出:['an378j'、'an378j86764edwf'、'AN378JIJM5644564464EWF'、'FG453H256677SAKJH'、'fg453hbrd8968764ewf']
-查看最后一个元素。谢谢大家。给出的解决方案非常有效。