按字典顺序打印列表列表(包含整数)
Printing list of list (containing integers) in lexicographic order
任务:给你三个整数 x、y 和 z 以及一个整数 n。您必须打印所有可能坐标的列表,其中总和不等于 n。打印 按字典递增顺序打印列表。
下面是我的代码。除了按字典顺序打印外,工作正常。下面是我的 code.Is 有更好的方法来获取包含整数的列表的字典顺序吗?
from itertools import combinations
lst=[]
if __name__ == '__main__':
x = int(input())
y = int(input())
z = int(input())
n = int(input())
lst=[[a,b,c] for b in range(y+1) for c in range(z+1) for a in range(x+1) ]
finallst=[]
for items in combinations(lst,3):
for nums in items:
x=sum(nums)
if x!=n and nums not in finallst:
finallst.append(nums)
f_finallst= (sorted(map(str,(finallst)))) #converted to string to get lexicographic order
print (f_finallst)
My result=['[0, 0, 0]', '[0, 0, 1]', '[0, 1, 0]', '[1, 0, 0]', '[1, 1, 1]']
Expected result=[[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
print([coords
for coords in itertools.product(range(x+1), range(y+1), range(z+1))
if sum(coords) != n])
通过使用 map(str, finallst)
,您可以将列表中的每个元素都转换为 str
。您想保持元素原样,但使用 str
作为排序键。
f_finallst= sorted(finallst, key=str)
x = int(input())
y = int(input())
z = int(input())
n = int(input())
lists=[[i,j,k] for i in range(x+1)
for j in range(y+1)
for k in range(z+1) if (i+j+k)!=n]
print(lists)
我发现添加 lambda 函数(基本上用作排序比较的键)就可以了。有关详细说明,请阅读 here
if __name__ == '__main__':
x = int(input())
y = int(input())
z = int(input())
n = int(input())
orginal_list = [[i, j, k] for k in range(z+1) for j in range(y+1) for i in range(x+1) if i + j + k != n]
sorted_list = sorted(orginal_list, key = lambda i: (len(i), i))
print(sorted_list)
任务:给你三个整数 x、y 和 z 以及一个整数 n。您必须打印所有可能坐标的列表,其中总和不等于 n。打印 按字典递增顺序打印列表。 下面是我的代码。除了按字典顺序打印外,工作正常。下面是我的 code.Is 有更好的方法来获取包含整数的列表的字典顺序吗?
from itertools import combinations
lst=[]
if __name__ == '__main__':
x = int(input())
y = int(input())
z = int(input())
n = int(input())
lst=[[a,b,c] for b in range(y+1) for c in range(z+1) for a in range(x+1) ]
finallst=[]
for items in combinations(lst,3):
for nums in items:
x=sum(nums)
if x!=n and nums not in finallst:
finallst.append(nums)
f_finallst= (sorted(map(str,(finallst)))) #converted to string to get lexicographic order
print (f_finallst)
My result=['[0, 0, 0]', '[0, 0, 1]', '[0, 1, 0]', '[1, 0, 0]', '[1, 1, 1]']
Expected result=[[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
print([coords
for coords in itertools.product(range(x+1), range(y+1), range(z+1))
if sum(coords) != n])
通过使用 map(str, finallst)
,您可以将列表中的每个元素都转换为 str
。您想保持元素原样,但使用 str
作为排序键。
f_finallst= sorted(finallst, key=str)
x = int(input())
y = int(input())
z = int(input())
n = int(input())
lists=[[i,j,k] for i in range(x+1)
for j in range(y+1)
for k in range(z+1) if (i+j+k)!=n]
print(lists)
我发现添加 lambda 函数(基本上用作排序比较的键)就可以了。有关详细说明,请阅读 here
if __name__ == '__main__':
x = int(input())
y = int(input())
z = int(input())
n = int(input())
orginal_list = [[i, j, k] for k in range(z+1) for j in range(y+1) for i in range(x+1) if i + j + k != n]
sorted_list = sorted(orginal_list, key = lambda i: (len(i), i))
print(sorted_list)