» »

[Python] Kako iz seznama narediti možne kombinacije le-teh?

[Python] Kako iz seznama narediti možne kombinacije le-teh?

HotBurek ::

Pozdravljeni.


Zanima me, če mi lahko kdo pomaga pri programskem problemu, ki je dokaj preprost. V osnovi ne vem, kako se temu problemu reče, da bi iskal rešite. Zagotovo pa so bili primeri takšnih nalog že rešeni, po možnosti v kakšnem tro vrstičnem for loop-u.


Vhodni podatek je seznam, ki je lahko poljubno dolg (dolžine od 1 pa do max 10).
input1 = ["a", "b"];

input2 = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];


Za output pa bi želel imeti vse kombinacije elementov, v različnih zaporedjih, ter z po min 1 element in max 3 elemenit, pri čemer se isti element ne sme ponoviti. Se pravi "aa" ni ok.
Če je pa v output-u med vhodnimi elementi še presledek, je pa to že špica.

output1 = ["a", "b", "a b", "b a"];

output2 = ["a", "a b", "b a", "d c b", "i h j", "a j b", "e f", "g f e", itn...];

To je to. :O8-)
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
  • spremenilo: HotBurek ()

Zimonem ::

Zadeva je rešljiva z eno iteracijo, vsaj kakor je opisana. Veselje z rešitvijo prepuščamo, bralcem.

HotBurek ::

Trenutno imam spodnji sample, ampak program ne izpiše kombinaije "brokoli juha". Pa verjetno še katere ne.

import itertools;

input = ["juha", "brokoli", "200g", "NOVO"];

output = [];

for i in range(0, len(input) + 1):

    for j in itertools.combinations(input, i):

        print(j);

        if len(j) in (1, 2, 3):

            element = "";

            for k in range(0, len(j)):

                element = element + j[k] + " ";

            element = element.strip();

            output.append(element);

for i in range(0, len(output)):

    print(">>>" + str(output[i]) + "<<<");

    if output[i] == "juha brokoli":

        print("BINGO 1 BINGO 1 ******************************************************");

    if output[i] == "brokoli juha":

        print("BINGO 2 BINGO 1 ******************************************************");
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Zimonem ::

Tega ne delaš s strings ampak preprostimi enimi oz diskretiziranimi vrednostmi. Oz je cela karta že narejena.

Zimonem ::

Sploh pa ne more biti brokoli, brokoli 300g kombinacija.
Lahko je brokoli župa , ali brokoli svež 300g. Odloćit se moraš.

Baja ::

garamond ::

import itertools
input = ["juha", "brokoli", "200g", "NOVO"]
output = [
    [" ".join(i) for i in itertools.permutations(input, j)] for j in range(1,4)
]

[print(3*("\n"+54*"*") + "\nBINGO" +3*("\n"+54*"*")) for p in output if "brokoli juha" in p]
A parody of extremism is impossible to differentiate from sincere extremism.

WizzardOfOZ ::

a python pozna product?

tko rešiš v rubyju
a = [1,2]
b = [3,4,5,6]
(a.product b).collect {|x, y| f(x, y)}
Milčinski je napisal butalce kot prispodobo in ne kot priročnik!!!
Svuda u svijetu ima budala ali je izgleda kod nas centrala!!!

Zgodovina sprememb…

mr_chai ::

WizzardOfOZ je izjavil:

a python pozna product?

tko rešiš v rubyju
a = [1,2]
b = [3,4,5,6]
(a.product b).collect {|x, y| f(x, y)}


če tole dela kartezijski produkt, potem to ni to kar OP želi.

HotBurek ::

Zaporedje, ki sem ga našel v tem kontekstu, je: 1,4,15,64,325,1956

Ampak imam (ob predpostavki, da ne izvajam limit max 3 vhodni elementi):
- za 1 vhodni element output 1
- za 2 vhodna elementa output 4
- za 3 vhodne elemente output 15
- za 4 vhodne elemente output 48 in ne 64
- za 5 vhodnih elementov output 135 in ne 325
- za 6 vhodnih elementov output 348 in ne 1956

Resda je to na neki prototip kodi, ampak za igračkanje ki ga izvajam, bo to ok.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

WizzardOfOZ ::

mr_chai je izjavil:

WizzardOfOZ je izjavil:

a python pozna product?

tko rešiš v rubyju
a = [1,2]
b = [3,4,5,6]
(a.product b).collect {|x, y| f(x, y)}


če tole dela kartezijski produkt, potem to ni to kar OP želi.



Res je. Sem malo preveč kode dodal. Pravilna koda bo ta:
a = [1,2]
b = [3,4,5,6]
puts a.product(b)

To naj bi bil rezultat:
[[1, 3], [1, 4], [1, 5], [1, 6], [2, 3], [2, 4], [2, 5], [2, 6]]

Oziroma, če iz enega polja (samo a) potem a.product(a), pa izločiš tiste, ki imajo x in y enak.
Milčinski je napisal butalce kot prispodobo in ne kot priročnik!!!
Svuda u svijetu ima budala ali je izgleda kod nas centrala!!!

Zgodovina sprememb…

Zimonem ::

Ali sta množici disjunktni?

HotBurek ::

To naj bi bil rezultat:
[[1, 3], [1, 4], [1, 5], [1, 6], [2, 3], [2, 4], [2, 5], [2, 6]]



To niso vse opcije.

Že v štartu manjkajo vrednosti navzdol: [3, 1], [6, 2, 1].
Pa vse druge mix mešanice: [6, 2, 3], [1, 4, 2].
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Zgodovina sprememb…

  • spremenilo: HotBurek ()

WizzardOfOZ ::

A to hoče on vse možne kombinacije, brez ponavljajočih?
Milčinski je napisal butalce kot prispodobo in ne kot priročnik!!!
Svuda u svijetu ima budala ali je izgleda kod nas centrala!!!

HotBurek ::

Mislim, da imam rešitev, ki dela.

Za input = ["a", "b", "c", "d"], je output length 48.

a
b
c
d
a b
a c
a d
b c
b d
c d
a b c
a b d
a c d
b c d
a b c d
d a
d b
d c
d a b
d a c
d b c
d a b c
c a
c b
c d a
c d b
c a b
c d a b
b a
b c a
b d a
b c d a
d c b
d c a
d b a
c b a
d c b a
a d c
a d b
a c b
a d c b
b a d
b a c
b d c
b a d c
c b d
c a d
c b a d
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

WizzardOfOZ ::

a = [1 , 2 , 3 , 4 , 5 , 6]
To je za vse možne kombinacije (recimo tudi [6 , 6 , 6])
(1..3).flat_map{|size| a.repeated_permutation(size).to_a }


To je pa z izločenimi (recimo brez [6 , 5 , 6])
(1..3).flat_map{|size| a.permutation(size).to_a }


[[1], [2], [3], [4], [5], [6], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [2, 1], [2, 3], [2, 4], [2, 5], [2, 6], [3, 1], [3, 2], [3, 4], [3, 5], [3, 6], [4, 1], [4, 2], [4, 3], [4, 5], [4, 6], [5, 1], [5, 2], [5, 3], [5, 4], [5, 6], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 2, 6], [1, 3, 2], [1, 3, 4], [1, 3, 5], [1, 3, 6], [1, 4, 2], [1, 4, 3], [1, 4, 5], [1, 4, 6], [1, 5, 2], [1, 5, 3], [1, 5, 4], [1, 5, 6], [1, 6, 2], [1, 6, 3], [1, 6, 4], [1, 6, 5], [2, 1, 3], [2, 1, 4], [2, 1, 5], [2, 1, 6], [2, 3, 1], [2, 3, 4], [2, 3, 5], [2, 3, 6], [2, 4, 1], [2, 4, 3], [2, 4, 5], [2, 4, 6], [2, 5, 1], [2, 5, 3], [2, 5, 4], [2, 5, 6], [2, 6, 1], [2, 6, 3], [2, 6, 4], [2, 6, 5], [3, 1, 2], [3, 1, 4], [3, 1, 5], [3, 1, 6], [3, 2, 1], [3, 2, 4], [3, 2, 5], [3, 2, 6], [3, 4, 1], [3, 4, 2], [3, 4, 5], [3, 4, 6], [3, 5, 1], [3, 5, 2], [3, 5, 4], [3, 5, 6], [3, 6, 1], [3, 6, 2], [3, 6, 4], [3, 6, 5], [4, 1, 2], [4, 1, 3], [4, 1, 5], [4, 1, 6], [4, 2, 1], [4, 2, 3], [4, 2, 5], [4, 2, 6], [4, 3, 1], [4, 3, 2], [4, 3, 5], [4, 3, 6], [4, 5, 1], [4, 5, 2], [4, 5, 3], [4, 5, 6], [4, 6, 1], [4, 6, 2], [4, 6, 3], [4, 6, 5], [5, 1, 2], [5, 1, 3], [5, 1, 4], [5, 1, 6], [5, 2, 1], [5, 2, 3], [5, 2, 4], [5, 2, 6], [5, 3, 1], [5, 3, 2], [5, 3, 4], [5, 3, 6], [5, 4, 1], [5, 4, 2], [5, 4, 3], [5, 4, 6], [5, 6, 1], [5, 6, 2], [5, 6, 3], [5, 6, 4], [6, 1, 2], [6, 1, 3], [6, 1, 4], [6, 1, 5], [6, 2, 1], [6, 2, 3], [6, 2, 4], [6, 2, 5], [6, 3, 1], [6, 3, 2], [6, 3, 4], [6, 3, 5], [6, 4, 1], [6, 4, 2], [6, 4, 3], [6, 4, 5], [6, 5, 1], [6, 5, 2], [6, 5, 3], [6, 5, 4]]


@HotBurek pa še za tvoj primer a = ["a" , "b" , "c" , "d"]
[["a"], ["b"], ["c"], ["d"], ["a", "b"], ["a", "c"], ["a", "d"], ["b", "a"], ["b", "c"], ["b", "d"], ["c", "a"], ["c", "b"], ["c", "d"], ["d", "a"], ["d", "b"], ["d", "c"], ["a", "b", "c"], ["a", "b", "d"], ["a", "c", "b"], ["a", "c", "d"], ["a", "d", "b"], ["a", "d", "c"], ["b", "a", "c"], ["b", "a", "d"], ["b", "c", "a"], ["b", "c", "d"], ["b", "d", "a"], ["b", "d", "c"], ["c", "a", "b"], ["c", "a", "d"], ["c", "b", "a"], ["c", "b", "d"], ["c", "d", "a"], ["c", "d", "b"], ["d", "a", "b"], ["d", "a", "c"], ["d", "b", "a"], ["d", "b", "c"], ["d", "c", "a"], ["d", "c", "b"]]

a = ["a" , "b" , "c" , "d"]
d = Array.new
d = (1..3).flat_map{|size| a.permutation(size).to_a }
puts "#{d}\n\n"
Milčinski je napisal butalce kot prispodobo in ne kot priročnik!!!
Svuda u svijetu ima budala ali je izgleda kod nas centrala!!!

Zgodovina sprememb…



Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

CSV file

Oddelek: Programiranje
261790 (994) kunigunda
»

MojeDelo.com praznični maratonski IT hekaton

Oddelek: Loža
463803 (1473) Pimoz
»

python regex split

Oddelek: Programiranje
7552 (457) HotBurek

python pomoč

Oddelek: Programiranje
393407 (2328) Mavrik
»

[Python] učenje

Oddelek: Programiranje
372669 (1966) Isotropic

Več podobnih tem