For ile alınmış iki liste çıktısını birleştirme

Bir fonksiyon yazdım ve fonksiyon for döngüsü ile iki kez işleyip, sonucunda [“1,A”] [“2,B”,“3,C”]… gibi bir çıktı alıyorum.
Yani fonksiyonu çağırdığımda
[“1,A”]
[“2,B”,“3,C”]…
Çıktısı geliyor. Benim isteğim, bu çıktının tek bir liste olarak birleştirilmesi, zira sonra yine for döngüsüne alacağım.(Arada virgül de yok)

For döngüsünü de yazabilir misin buraya? Döngüde değiştirilmesi gereken bir yer yoksa eğer sadece liste_1 + liste_2 gibi bir işlem yaparak iki listeyi birleştirebiliriz.

1 Beğeni

Başka bir bilgisayarda çalıştığım için atamadım. Şimdi atacağım fonksiyonu, bir saniye.

1 Beğeni
import itertools

def kumeleme(uye):
    liste=[]
    kume = "123ABC"
    uyesayısı=uye
    for i in itertools.product(kume, repeat=uyesayısı):
        liste.append(list(i))
    return (liste)

def toplamakume(uye):
    strin=""
    liste2=[]
    x=kumeleme(uye)
    for i in x:
        liste2.append(strin.join(i))
        
    print (liste2)

def kumebırlesmıs(n):
    x=range(1,n+1)
    for i in x:
        toplamakume(i)

kumebırlesmıs(2)

Şimdi benim isteğim bu iki liste çıktısını tek liste olarak almak, zira bunu yaparsam, bu son listeyi de bir döngüde tek tek kullanmak istiyorum.

Yani çıktım şöyle olsun istiyorum:

['1', '2', '3', 'A', 'B', 'C', '11', '12', '13', '1A', '1B', '1C', '21', '22', '23', '2A', '2B', '2C', '31', '32', '33', '3A', '3B', '3C', 'A1', 'A2', 'A3', 'AA', 'AB', 'AC', 'B1', 'B2', 'B3', 'BA', 'BB', 'BC', 'C1', 'C2', 'C3', 'CA', 'CB', 'CC']

total_list = liste + liste2

bu şekilde yapabilirsin. Bu mevzuyu programına uyarlaman lazım sadece. def toplamakume(uye): çalıştığı zaman içerisine ilk oluştuğu liste değişkenini alsın 2. listeyi oluşturduktan sonra ikisi bir toplasın.

nesne tabanlı (sınıflar-class) programlama yaparak bunu kolaylıkla yapabilirsin. Sınıflar hakkında bilgim yok diyorsan sanırım lambda fonksiyonlarını bilmek gerekiyor.

onu da biliyom da, şimdilik sadece bu işleme ihtiyacım var. Çözen olursa makbule geçer.

for self.i in itertools.product(self.kume, repeat=self.uye_sayisi):

bu satırda

AttributeError: ‘’ object has no attribute ‘product’ on line 10 in main.py

hatayı alıyorum. Bilgin var mı?

tamamını nasıl kurdun bir bakayım. hata product metotunun attribude olarak yani nitelik olarak bulunmadığını söylüyor. Yani class sınıfında bir sınıf niteliği değil diyor. Ama tamamını yaz bir göreyim.

import itertools

class Application(object):
  
  def __init__(self):
    
    self.liste_1 = list()
    self.kume = "123ABC"
    self.uye_sayisi = 15
    for self.i in itertools.product(self.kume, repeat=self.uye_sayisi):
      self.liste_1.append(self.i)
    print(self.liste_1)
    
app = Application()

Senin ürettiğin değişkeni kendim verdim bakalım çalışacak mı diye. Çalışmadı?_? Yanlış bir şeyler de yapmış olabilirim.

1 Beğeni

@Shanyu, galiba oldu.

Kod:

import itertools


class App:
  def __init__(self, n):
    result = []

    x = range(1, n + 1)
    for i in x:
      result.append(self.top_kume(i))

    print(result[0] + result[1])


  def top_kume(self,n):
    return ["".join(i) for i in self.kumeleme(n)]


  def kumeleme(self,n):
    liste = []
    kume = "123ABC"
    for i in itertools.product(kume, repeat=n):
        liste.append(i)

    return liste

    
App(2)

Çıktı:

['1', '2', '3', 'A', 'B', 'C', '11', '12', '13', '1A', '1B', '1C', '21', '22', '23', '2A', '2B', '2C', '31', '32', '33', '3A', '3B', '3C', 'A1', 'A2', 'A3', 'AA', 'AB', 'AC', 'B1', 'B2', 'B3', 'BA', 'BB', 'BC', 'C1', 'C2', 'C3', 'CA', 'CB', 'CC']

İstediğiniz bu muydu?

1 Beğeni

Yoksa Akıncı sen misin?

Akıncı kim?

Yanlız, şu kısımı, result[0] + result[1] önce verdiğiniz koda eklemeyi denedim, iki listenin ilk iki karakterini döndürdü; sonra da @tevhidulvahset’in kodunu taslak olarak kullanıp sizin kodlarınızı yerleştirdim.

2 Beğeni

Şuan benim için sensin :smiley:

1 Beğeni

Bir de, sakıncası yoksa, şunu merak ediyorum:
Bu kod ne işe yarıyor?

1 Beğeni
import itertools
from functools import reduce

def solution(kume, n):
    return reduce(lambda l, r: l+r, (list(map("".join, itertools.product(kume, repeat=i))) for i in range(1, n+1)), [])

kume = "123ABC"

print(solution(kume, 2))
2 Beğeni

Müdavimlerin müdavimi Ekrem Dincel

Siz söyleyin bari, bu kodlar ne işe yarıyor?

parametrik uzayı veriyor, hem de tamamını :slight_smile:

1 Beğeni

range(1, n+1) aralığındaki değerleri tekrar etme sayısı olarak kullanıp kume'nin bu uzunluktaki product'larını tek bir listede birleştiriyor. Bir de bunları tuple olarak değil str olarak veriyor, map("".join, ...) sayesinde.

1 Beğeni