Python ile Kümeler hakkında

Merhaba Arkadaşlar Aşağıda göstermiş olduğum bir X kümesinin içindeki (a,b) elemanını benden istenen bir değer ile değiştirmek istesem bunu nasıl yapabilirim sizce ? olayı biraz daha karmaşık yapalım ben sırası ile 3 farklı değer girsem bu değerler a c e elemanlarını değiştirse ( tabi bu 3 değil yeri geldiğinde 30 değer olsada )

X = {(a,b),(c,d),(e,f)}

ikinci bir sor ;

Y diye bir kümemin içinde bulunan elemanlarının ilk değerleri aynı olan ( içinde ilk sırada a olanları ) toplayıp A isminde bir küme oluşturup ve diğer sırada ki ( b + d + f ) elemanları yazmasını istesem sizce nasıl bir durum oluşur ? Yani a = {(b)+(d)+(f)} bunun gibi bir düzen tabi 3 5 elemanlı değil en az 50 elemanlı

Y = {(a,b),(a,d),(a,f)}

konuya bakıldığında biraz basit gibi geliyor ve benim sistemimin içine konmaya çalışıldığında biraz karmaşık kalıyor belki size anlatırken bile karışmış olabilir bilginize birleşim kesişim fark gibi python konularına baktım fakat onlar içinde bulunan tek haneli elemanları sayıyor benim yapmak istediğim biraz daha farklı

İlgi Ve Alakanız için Şimdiden Teşekkürler.

Python ile ilgili az çok bilginiz var mı? Var ise şimdiye kadar yazdığınız kodları paylaşır mısınız?

Benim Python hakkında yapmış olduğum kodlar bulunmamaktadır ben 4 5 aydır pdflerını okuyorum vede kendi çapımda yazıyorum birde eğitim videoları dinliyorum

Bunu neden Sordunuz?

İlk soru için en mantıklı yöntem değiştirilmek istenen değerin silinip yeni içeriğiyle tekrar oluşturulması.

Bu sürekli yapılsa excell olarak da yapılır o zaman Python A gerek kalmamış olur ben bunu Python ile yapmak istiyorum

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-

# Verdiğiniz bilgilerle Python örnekleri yaparsanız
# takıldığınız yerde insanlar daha rahat yardımcı olabilirler.

# X kümesine yerleştireceğimiz değişkenlere ve
# bu değişkenlerin değerlerine ihtiyacımız var:
a = 1
b = 2
c = 3
d = 4
e = 5
f = 6

# Şimdi X kümesi oluşturulabilir:
X = {(a, b), (c, d), (e, f)}
# İlerde lazım olur belki diye yedeğini oluşturuyorum.
X_ = X
print(X)

# Kümelerdeki verileri X[0] şeklinde çağıramayız. 
# Bunun için kümeyi bir listeye çeviriyorum:
X = list(X)
print(X)

# Bir tuple verisini X[0] diye çağırabiliriz.
# Ama X[0] = 3 işleminde olduğu gibi,
# bir değişkene yeni bir değer atayamayız.
# Bu yüzden X listesinin elemanı olan bütün
# demet verilerini listeye çeviriyorum:
for i, j in enumerate(X):
    j = list(j)
    X[i] = j
print(X)

# Artık X listesinin içindeki alt listelerin içinde
# bulunan elemanları değiştirebilirim.

# Mesela a, X[0][0] konumunda yer alıyor. Eğer a'yı
# değiştirmek istiyorsam, aşağıdaki kodları yazarım:
X[0][0] = 10
print(X)

# b'yi değiştirmek istiyorsam, aşağıdakileri yazarım:
X[0][1] = 22
print(X)

# f'yi değiştirmek istiyorsam, aşağıdakileri yazarım:
X[2][1] = 0
print(X)

# Mesela bütün verileri belli bir sıraya göre dizmek istiyorum:
degisken = 10
for i, j in enumerate(X):
    for k, m in enumerate(j):
        X[i][k] = degisken
        degisken += 1 
print(X)

# X'i tekrar eski haline getirelim.
X = X_
print(X)

# Bir liste üretecinde X'i kullanıyorum.
X = [[i, i * 10] for i, j in enumerate(X)]
print(X)

# Sizin yapmak istediğiniz acaba bu tarz bir değiştirme işlemi mi?

Kümeyi tekrar listeye çevirdiğimizde kümeyi oluşturduğumuz sırayla değil karışık olarak oluşturuyor.

Çünkü oluşturduğunuz küme, listeler gibi içerdiği değerlerin sırasını hatırlamaz. Yani bir kümeyi her yazdırdığınızda farklı sıralamalarla karşılaşmanız normal. Bu yüzden siz bir listeyi kümeye çevirdikten sonra tekrar liste yaparsanız sıralamanız elbette kaybolacaktır.

Bu gibi problemler ile uğraşmadan önce belirli bir seviyede Python bilgisine sahip olmanız gerekir. Bunun için sormuştum. Birkaç aydır Python ile ilgili belgeler okuyorsanız o seviyeye gelmiş olmalısınız. Bu durumda çözmek istediğiniz problem ile ilgili, yeri gelince araştırma da yaparak, birkaç Python satırı yazmak, takıldığınız yerde de burada soru sormak en hızlı cevabı almanızı sağlayacaktır.

Anladım ismail hocam yapmak istediğim kısmı yazmaya çalışıyorum fakat düşünceler hep biryerde tıkanıyor bağlanamıyorum bazı kısımları o yüzden de sürekli hem soruyorum hem bir yandan verilen kodları yapmaya çalışıyorum birleştirmeye çalışıyorum parçaları

Ben X değişkenini yedeğine eşitlediğim için bir sıra değişikliği olmadı. Bakın:

{(1, 2), (3, 4), (5, 6)}
[(1, 2), (3, 4), (5, 6)]
[[1, 2], [3, 4], [5, 6]]
[[10, 2], [3, 4], [5, 6]]
[[10, 22], [3, 4], [5, 6]]
[[10, 22], [3, 4], [5, 0]]
[[10, 11], [12, 13], [14, 15]]
{(1, 2), (3, 4), (5, 6)}
[[0, 0], [1, 10], [2, 20]]

Ama dediğiniz gibi listenin öğelerini kümeye eklerken sıra değişikliği oluyor (tam tersi işlemde olmuyor.).

2 Beğeni

Herkesin gözünden mi kaçmış yoksa ben mi yanlış biliyorum ama istediğiniz şeylerin istediğiniz yolla yapılması pek mümkün değil gibi.

Şöyle ki:

  • Python kümelerinin sıra hafızaları yoktur. Yani siz değerleri verseniz bile sıralama olmayacağından verileri doğru bir şekilde değiştirmek de mümkün değil.
  • Kümeleri listelere çevirdiğinizi varsayalım, o zaman yine bir problem çıkıyor: demetler değiştirlebilir veri tipleri değillerdir. Ögelerini listeler gibi değiştiremezsiniz. Demeti yeniden tanımlamak bir kaçış yolu fakat siz verileri değiştirebileceğiniz bir veri tipini kullanmak hem daha doğru, hem daha mantıklı olacaktır.

Bu yüzden şöyle bir şeyler yazdım; deneyin, aradığınız ilk şey sanırım bu:

Liste_1 = [[1,2], [3,4], [5,6], [7,8], [9, 10]]

degistirici = (100, 200, 300, 400, 500)
sayac = 0

for i in Liste_1:
    i[0] = degistirici[sayac]
    sayac += 1

print(Liste_1)

Not düşeyim: Bu uygulamadaki öge sayısını istediğiniz kadar arttırabilirsiniz. Herhangi bir engel teşkil etmez. Tek eksiği, sizin her listedeki ilk ögeyi değiştireceğinizi varsayıyoruz. Yani eğer 2. listedeki "[3, 4]"ü değiştirmek istemez de "[5,6]"dan devam etmek isterseniz bu kodlar yetersiz kalacaktır. Eğer öyle bir sorununuz yoksa sanıyorum ki yeterli bir çözüm bu.

İkinci sorunuz için:
Bu sorunuzda veri tipi olarak demet kullanmanızda sakınca yok gibi.

#Ben yine liste kullandım fakat burada kümeleri de kullanabilirsiniz.
Liste2 = [("tek", 1), ("tek", 3), ("cift", 2), ("cift", 4), ("tek", 5), ("cift", 6), ("cift", 8), ("tek", 7), ("tek", 9), ("cift", 10)]

tekler = []
ciftler = []

for i in Liste2:
    if i[0] == "tek":
        tekler.append(i[1])
    
    elif i[0] == "cift":
        ciftler.append(i[1])

print(tekler)
print(ciftler)

Burada ben, iki farklı çeşitte birinci değer kullandım siz yine istediğiniz kadar çoğaltabilirsiniz. Yine de istediğiniz şeyi bu kodlar tam olarak karşılamıyor sanırsam. Çünkü, demetlerin birinci değerlerini elle liste olarak atadık. Sizin istediğiniz bunun otomatik olarak olması.
Fakat burada iki sorun ortaya çıkıyor:

  1. İlk değeri string olarak tuttuğumuz için (zaten başka şansımız da yok) bu değerlerden değişken tanımlama imkanımız normal yollardan yok. Bazı ufak hilelerle yapılabildiğini biliyorum. Biraz araştırmanız gerekecek.
  2. İlk değer eğer string değil de integrer yani sayı olacaksa; sayılar ile değişken ismi Python’da atanamaz.

Son olarak; arkadaşların dediği gibi, aklınızdaki şeyi kodlara döküp paylaşmanız hem bizim anlamamızı kolaylaştırır hem de sizin kodlarınız temel alınarak çözüm üretilmiş olur.
Kolay gelsin.

1 Beğeni

@ismailarilik @equinox @dildeolupbiten

İlgi ve alakanız için teşekkürler;

Şöyle Bir Kod :

A1 = input()
A2 = input()
A3 = input()
A4 = input()
A5 = input()
A6 = input()
A7 = input()
A8 = input()
A9 = input()
A10 = input()

A1_PAFTASI = [[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10]]

for i in A1_PAFTASI:
    print("Tümü =" ,A1_PAFTASI)
**# Giriş  için şöyle değerler düşündüm**
**# "A1,10"**
**# "A2,20"**
**# "A3,5"**
**# "A4,3"**
**# "A5,20"**

**# "A1,10"**
**# "A2,20"**
**# "A6,5"**
**# "A7,3"**
**# "A8,20"**

**# "A10,10"**
**# "A9,20"**
**# "A3,5"**
**# "A4,3"**
**# "A5,20"**

şimdi arkadaşlar gördüğünüz gibi giriş yapılacak değerlerde yukarıda yazmakta film buradan sonra kopmakta üç ayrı grupta gözüken aynı değerler var A1 leri örnek almak gerekirse eğer ben bu değeler sonucunda A1 (10+10) / A2(20+20) / A3(5+5) … vs vs vs giriş yapılacak değerler farklılık gösterebiliyor A1 serisi değil XF serisi de olabilir

@equinox

Furkan Hocam senin yolladıkların ile benim yazdıklarımı birleştirmeye çalıştım ama böyle bir durum ortaya çıktı sizce nedendir ? Aşağıda görüldüğü gibi tümü adlı kümeden birden cok yazdı birde istediğimi yapamadım A1 leri bir arada toplayamadım.

İlgi Alakanız için Telekkürler.

Birden çok yazdırması problemi buradan kaynaklı:

for i in A1_PAFTASI:
    print("Tümü =", A1_PAFTASI)

A1_PAFTASI’ndaki her eleman için print fonksiyonunu tekrar çalıştırıyorsunuz. Çözümü kolay, bahsettiğim kısımdaki for döngüsünü silin. Tek bir print fonksiyonu yeterli.

Ama istediğinizi elde edememiş olmanız kodların şu haliyle normal gibi görünüyor. Kodlarınızın tamamını burada paylaşabilirseniz yardımcı olmamız kolaylaşır. Açıkçası hâlâ ne yapmak istediğinizi anladığımdan emin değilim :sweat_smile:

1 Beğeni

@equinox

Elimdeki kodları aşağıda paylaşıyorum benim yapmak istediğim benim girmiş olacağım A1 A2…A10 değerleri içlerinde kendi gruplarında toplamak

Girilmesi muhtemel değerler
AC, 10
AA, 23------
BA, 45
BC, 10
AA, 15------
A20, 10
AA, 23------
BA, 45
CA, 10
CC, 15

bunları aşağıdaki A1 input kısmına girdiğimde A1 = AC, 10 yazsın isiyorum buraya kadar hepsi tamam buradan sonra aynı olan örneğin AA (23+15+23) şeklinde toplanmasını istiyorum buda oluştuktan sonra kalan kısımları aynı olmayanları yani da düzeneğin altına eklesin istiyorum örneğin CC nin aynısından yok onuda alıp CC (15) yazsın istiyorum

sanırım cok şey istiyorum bir türlüde anlatamadım.

A1 = input()
A2 = input()
A3 = input()
A4 = input()
A5 = input()
A6 = input()
A7 = input()
A8 = input()
A9 = input()
A10 = input()

A1_PAFTASI = [(A1), (A2), (A3), (A4), (A5), (A6), (A7), (A8), (A9), (A10)]

print(“Tümü =” ,A1_PAFTASI)

listeler = A1_PAFTASI

tekler = []
ciftler = []

for i in listeler:
if i[0] == (‘A1 10’):
tekler.append(i[1])

elif i[0] == “cift”:
ciftler.append(i[1])

print(tekler)
print(ciftler)