我有一个嵌套列表,其中包含要根据嵌套列表的第一个元素进行分组的字符串。将它们分组后,然后我要删除所有重复的第一个元素,并将列表转换为以分号分隔的简单字符串。
到目前为止,我所管理的是输出简单的字符串以及删除重复的第一个元素。为此,我将列表的第一个元素保存在一个新的空列表中,并使用if / else语句来确定要追加到新输出列表的内容。
exampleinput = ["[['1','2','3'],['1','4','6'],['2','1','2'],['3','4','2'], ['1','2','5'],['1','7','8']]"]
def makestring(n):
str1 = ' '.join(n)
return str1
def transform(n):
first = []
output = []
for i in n:
if i[0] not in first:
output.append(makestring(i))
else:
string1 = makestring(i[1:])
output.append(string1)
first.append(i[0])
return output
for i in exampleinput:
print(transform(eval(i.strip())))
输入示例:
[['1','2','3'],['1','4','6'],['2','1','2'],['3','4','2'],['1','2','5'],['1','7','8']]
所需的输出:
['1 2 3 ; 4 6 ; 2 5 ; 7 8', '2 1 2', ' 3 4 2']
实际输出:
['1 2 3', '4 6', '2 1 2', '3 4 2, '2 5', '7 8']
有什么想法吗?提前致谢!
具有itertools.groupby
功能:
from itertools import groupby
inp_list = [['1','2','3'],['1','4','6'],['2','1','2'],['3','4','2'],['1','2','5'],['1','7','8']]
res = []
for k, g in groupby(sorted(inp_list, key=lambda x: x[0]), key=lambda x: x[0]):
item1, *rest = g
res.append('; '.join(map(' '.join, [item1] + [i[1:] for i in rest]))
if rest else ' '.join(item1))
print(res)
输出:
['1 2 3; 4 6; 2 5; 7 8', '2 1 2', '3 4 2']
仅使用辅助分组字典的奖励解决方案:
inp_list = [['1','2','3'],['1','4','6'],['2','1','2'],['3','4','2'],['1','2','5'],['1','7','8']]
groups_dict = {}
for sub_l in inp_list:
if sub_l[0] not in groups_dict:
groups_dict[sub_l[0]] = ' '.join(sub_l)
else:
groups_dict[sub_l[0]] += '; ' + ' '.join(sub_l[1:])
res = list(groups_dict.values())
print(res) # ['1 2 3; 4 6; 2 5; 7 8', '2 1 2', '3 4 2']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句