删除重复项并对输出进行排序
delete duplicates and sorts output
谁能帮我解决这个问题?
我有这段代码,他们需要计算从最大到最大(第一个数字)排序,然后消除重复
我知道我应该使用 .sort ()
但我不知道我是谁
这些结果
5=1=1
5=1=1
1=1=5
1=5=1
1=1=5
1=5=1
4=2=1
4=1=2
2=1=4
2=4=1
1=2=4
1=4=2
3=3=1
3=1=3
3=1=3
3=3=1
1=3=3
1=3=3
3=2=2
3=2=2
2=2=3
2=3=2
2=2=3
2=3=2
输出内联那些我想要这样做的东西
1=1=5
1=2=4
1=3=3
1=4=2
1=5=1
2=1=4
2=2=3
2=3=2
2=4=1
3=1=3
3=2=2
3=3=1
4=1=2
4=2=1
5=1=1
代码
def part(n, k):
def _part(n, k, pre):
if n <= 0:
return []
if k == 1:
if n <= pre:
return [[n]]
return []
ret = []
for i in range(min(pre, n), 0, -1):
ret += [[i] + sub for sub in _part(n-i, k-1, i)]
return ret
return _part(n, k, n)
x = part(7,3)
for i in x:
print(str(i[0])+'='+str(i[1])+'='+str(i[2]))
print(str(i[0])+'='+str(i[2])+'='+str(i[1]))
print(str(i[1])+'='+str(i[2])+'='+str(i[0]))
print(str(i[1])+'='+str(i[0])+'='+str(i[2]))
print(str(i[2])+'='+str(i[1])+'='+str(i[0]))
print(str(i[2])+'='+str(i[0])+'='+str(i[1]))
标准列表排序将适用于此。
要删除重复项,请转换为集合并返回列表。
编辑
因此,对最后一个 for 循环进行轻微编辑。为了可读性,我建议使用 so-called f-string.
由于原始代码格式,我误解了你的问题,但这个简短的例子应该适用于你的函数的结果...
lst = []
for elem in x:
lst.append(f"{elem[0]}={elem[1]}={elem[2]}")
lst.append(f"{elem[0]}={elem[2]}={elem[1]}")
lst.append(f"{elem[1]}={elem[0]}={elem[2]}")
lst.append(f"{elem[1]}={elem[2]}={elem[0]}")
lst.append(f"{elem[2]}={elem[0]}={elem[1]}")
lst.append(f"{elem[2]}={elem[1]}={elem[0]}")
lst = sorted(list(set(lst)))
for elem in lst:
print(elem)
输出
1=1=5
1=2=4
1=3=3
1=4=2
1=5=1
2=1=4
2=2=3
2=3=2
2=4=1
3=1=3
3=2=2
3=3=1
4=1=2
4=2=1
5=1=1
您可以使用 set
set_data_str = """5=1=1
5=1=1
1=1=5
1=5=1
1=1=5
1=5=1
4=2=1
4=1=2
2=1=4
2=4=1
1=2=4
1=4=2
3=3=1
3=1=3
3=1=3
3=3=1
1=3=3
1=3=3
3=2=2
3=2=2
2=2=3
2=3=2
2=2=3
2=3=2"""
# break the string into a list on the new lines
# create a set from the list
set_data = set(set_data_str.split('\n'))
# sort the set into a list
sorted_set_data = sorted(set_data)
# convert the sorted list into a string to print it
print('\n'.join(sorted_set_data))
归功于@Edo-Akse以获得更好的格式
谁能帮我解决这个问题? 我有这段代码,他们需要计算从最大到最大(第一个数字)排序,然后消除重复 我知道我应该使用 .sort () 但我不知道我是谁
这些结果
5=1=1
5=1=1
1=1=5
1=5=1
1=1=5
1=5=1
4=2=1
4=1=2
2=1=4
2=4=1
1=2=4
1=4=2
3=3=1
3=1=3
3=1=3
3=3=1
1=3=3
1=3=3
3=2=2
3=2=2
2=2=3
2=3=2
2=2=3
2=3=2
输出内联那些我想要这样做的东西
1=1=5
1=2=4
1=3=3
1=4=2
1=5=1
2=1=4
2=2=3
2=3=2
2=4=1
3=1=3
3=2=2
3=3=1
4=1=2
4=2=1
5=1=1
代码
def part(n, k):
def _part(n, k, pre):
if n <= 0:
return []
if k == 1:
if n <= pre:
return [[n]]
return []
ret = []
for i in range(min(pre, n), 0, -1):
ret += [[i] + sub for sub in _part(n-i, k-1, i)]
return ret
return _part(n, k, n)
x = part(7,3)
for i in x:
print(str(i[0])+'='+str(i[1])+'='+str(i[2]))
print(str(i[0])+'='+str(i[2])+'='+str(i[1]))
print(str(i[1])+'='+str(i[2])+'='+str(i[0]))
print(str(i[1])+'='+str(i[0])+'='+str(i[2]))
print(str(i[2])+'='+str(i[1])+'='+str(i[0]))
print(str(i[2])+'='+str(i[0])+'='+str(i[1]))
标准列表排序将适用于此。
要删除重复项,请转换为集合并返回列表。
编辑
因此,对最后一个 for 循环进行轻微编辑。为了可读性,我建议使用 so-called f-string.
由于原始代码格式,我误解了你的问题,但这个简短的例子应该适用于你的函数的结果...
lst = []
for elem in x:
lst.append(f"{elem[0]}={elem[1]}={elem[2]}")
lst.append(f"{elem[0]}={elem[2]}={elem[1]}")
lst.append(f"{elem[1]}={elem[0]}={elem[2]}")
lst.append(f"{elem[1]}={elem[2]}={elem[0]}")
lst.append(f"{elem[2]}={elem[0]}={elem[1]}")
lst.append(f"{elem[2]}={elem[1]}={elem[0]}")
lst = sorted(list(set(lst)))
for elem in lst:
print(elem)
输出
1=1=5
1=2=4
1=3=3
1=4=2
1=5=1
2=1=4
2=2=3
2=3=2
2=4=1
3=1=3
3=2=2
3=3=1
4=1=2
4=2=1
5=1=1
您可以使用 set
set_data_str = """5=1=1
5=1=1
1=1=5
1=5=1
1=1=5
1=5=1
4=2=1
4=1=2
2=1=4
2=4=1
1=2=4
1=4=2
3=3=1
3=1=3
3=1=3
3=3=1
1=3=3
1=3=3
3=2=2
3=2=2
2=2=3
2=3=2
2=2=3
2=3=2"""
# break the string into a list on the new lines
# create a set from the list
set_data = set(set_data_str.split('\n'))
# sort the set into a list
sorted_set_data = sorted(set_data)
# convert the sorted list into a string to print it
print('\n'.join(sorted_set_data))
归功于@Edo-Akse以获得更好的格式