我有一个嵌套列表,其中包含要根据嵌套列表的第一个元素进行分组的字符串。将它们分组后,我然后要删除所有重复的第一个元素,并将列表转换为以分号分隔的简单字符串。
到目前为止,我管理的是输出简单的字符串以及删除重复的第一个元素。为此,我将列表的第一个元素保存在一个新的空列表中,并使用if / else语句来决定要追加到新输出列表的内容。
psql -Upostgres -dtemplate0
示例输入:
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']
有什么想法吗?预先感谢!
答案 0 :(得分:2)
具有itertools.groupby
功能:
['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']
Bonus 解决方案:
Dim jsScript As String = $"<js><![CDATA[document.all(""login-email"").value = '{TextBox1.Text}';]]></js>.Value"
答案 1 :(得分:0)
不是将字符串追加到字符串1中,而是按照给定的顺序将其追加到输出中。这是我要工作的代码:
exampleinput = ["[['1','2','3'],['1','4','6'],['2','1','2'],['3','4','2'], ['1','2','5'],['1','7','8']]"]
def makestring(i):
return "".join(i)
def main(i):
string1 = ""
first = ["1"] # for (123)
output = []
string1 += makestring(i[0])
for x in i[1:]:
if x[0] in first:
string1 += " ; "+makestring(x[1:])
else:
output.append(makestring(x))
first.append(x[0])
return [string1] + output
if __name__ == "__main__":
print(main(eval(exampleinput[0].strip())))
这将返回输出: ['123; 46; 25; 78','212','342']
答案 2 :(得分:0)
首先,我使用join方法创建一个字符串列表
signal = [['1','2','3'],['1','4','6'],['2','1','2'],['3','4','2'],['1','2','5'],['1','7','8']]
my_list =[" ".join(x) for x in [y for y in signal] ]
然后从头到尾搜索列表,直到比较该字符串的第一个字符在其他项目中(如果为真且与该项目和索引都不相同) 大于所选项目的项目,然后将其删除。
for i in range(len(my_list)-1,0,-1):
for j in my_list:
if my_list[i][0] == j[0] and my_list[i] != j and i > my_list.index(j):
my_list[i]= my_list[i][1:]
print(my_list)
输出:
['1 2 3', ' 4 6', '2 1 2', '3 4 2', ' 2 5', ' 7 8']