查找具有共同起始元素的子列表 - python
Find sublists with common starting elements - python
我有一个嵌套列表:
lists =[['a','b','c'],
['a','b','d'],
['a','b','e'],
['с','с','с','с']]
我需要找到具有 2 个或更多常见(2 次或更多次出现)第一个元素的子列表,从这些元素中生成一个字符串,并从不包含公共第一个元素的子列表中生成一个字符串。子列表可以按不同的顺序排列,所以我想只检查下一个或上一个元素是错误的方法。期望的输出:
[['a b','c'],
['a b','d'],
['a b','e'],
['с с с с']]
我尝试了一些 for 循环,但没有成功。
我目前不知道从哪里开始,所以我们将不胜感激。感谢您的宝贵时间!
可能不是最有效的方法,但您可以尝试这样的方法:
def foo(l,n):
#Get all of the starting sequences
first_n = [list(x) for x in set([tuple(x[:n]) for x in l])]
#Figure out which of those starting sequences are duplicated
duplicates = []
for starting_sequence in first_n:
if len([x for x in l if x[:n] == starting_sequence])>2:
duplicates.append(starting_sequence)
#make changes
result = []
for x in l:
if x[:n] in duplicates:
result.append([" ".join(x[:n])]+x[n:])
else:
result.append([" ".join(x)])
return result
集合没有重复,但集合的元素必须是可散列的。由于列表是不可散列的,这就是我将它们转换为元组然后再转换回列表的原因。
我有一个嵌套列表:
lists =[['a','b','c'],
['a','b','d'],
['a','b','e'],
['с','с','с','с']]
我需要找到具有 2 个或更多常见(2 次或更多次出现)第一个元素的子列表,从这些元素中生成一个字符串,并从不包含公共第一个元素的子列表中生成一个字符串。子列表可以按不同的顺序排列,所以我想只检查下一个或上一个元素是错误的方法。期望的输出:
[['a b','c'],
['a b','d'],
['a b','e'],
['с с с с']]
我尝试了一些 for 循环,但没有成功。 我目前不知道从哪里开始,所以我们将不胜感激。感谢您的宝贵时间!
可能不是最有效的方法,但您可以尝试这样的方法:
def foo(l,n):
#Get all of the starting sequences
first_n = [list(x) for x in set([tuple(x[:n]) for x in l])]
#Figure out which of those starting sequences are duplicated
duplicates = []
for starting_sequence in first_n:
if len([x for x in l if x[:n] == starting_sequence])>2:
duplicates.append(starting_sequence)
#make changes
result = []
for x in l:
if x[:n] in duplicates:
result.append([" ".join(x[:n])]+x[n:])
else:
result.append([" ".join(x)])
return result
集合没有重复,但集合的元素必须是可散列的。由于列表是不可散列的,这就是我将它们转换为元组然后再转换回列表的原因。