Распечатка списка (содержащего целые числа) в лексикографическом порядке - PullRequest
0 голосов
/ 30 августа 2018

Задача: Вам даны три целых числа x, y и z вместе с целым числом n. Вы должны распечатать список всех возможных координат, где сумма не равна n. Печать Распечатать список в лексикографическом порядке. Ниже мой код. Работает нормально, за исключением печати в лексикографическом порядке. Ниже приведен мой код. Есть ли лучший способ получить лексикографический порядок списка, содержащего целые числа?

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]]

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Используя map(str, finallst), вы приводите каждый элемент в списке к str. Вы хотите сохранить элементы такими, какие они есть, но используйте str в качестве ключа сортировки.

f_finallst= sorted(finallst, key=str)
0 голосов
/ 30 августа 2018
print([coords 
       for coords in itertools.product(range(x+1), range(y+1), range(z+1))
       if sum(coords) != n])
...