Tegyük fel, hogy van egy listánk, például: [3, 2, 1]
. A lista összes permutációját szeretném létrehozni a következő formában:
[1, 1, 1], [2, 1, 1], [3, 1, 1], [1, 2, 1], [2, 2, 1] , [3, 2, 1]
bármely n
hosszúságú listához. Így az eredeti lista i
. elemének értéke az összes permutáció i
. elemének értékének felső határa.
Szeretnék egy generátort is használni a yield
használatával, mivel a beviteli lista meglehetősen nagy lehet (pl. n = 30
).
Eddig valami ilyesmit használtam:
itertools.product(range(1, 5), repeat=5)
Amelynek a következő kimenete van, ha for
hurokban használják:
(1, 1, 1, 1, 1), (1, 1, 1, 1, 2), (1, 1, 1, 1, 3), (1, 1, 1, 1, 4), (1, 1, 1, 2, 1), (1, 1, 1, 2, 2), (1, 1, 1, 2, 3), ...
Azonban nem hiszem, hogy lehetővé teszi egyéni korlátok megadását a permutációk minden eleméhez.
Kérjük, vegye figyelembe, hogy a beviteli lista elemeinek nem kell feltétlenül egymást követő számoknak lenniük, így a [25, 17, 10, 4]
egy érvényes bevitel.