İki string'in aynı olan kısımlarını silmek

Merhaba, elimde 2 adet string var ve bunların aynı olan kısımları var mı kontrol etmek ve eğer varsa silmek istiyorum. Yani şöyle:

string1 = """
yazbel
html
python
"""

string2 = """
html
python
"""

sonuc = ""

string1 in içinden hem string1 de hem de string2 de olan kısımları çıkardık ve sonuc değişkeni string1 in içinden hem string1 de hem de string2 de olan kısımların çıkarılmış hali olmalı yani “yazbel” olmalı.
Üzerinde düşündüm ama aklıma bir yol gelmedi : D

def kontrol():
    string1 = "yazbel html python".split(" ")
    string2 ="html python".split(" ")
    sonuc = ""
    for i in string1:
        if not i in string2:
            sonuc += i
    return sonuc
print(kontrol()) 
3 Beğeni
def benzersiz_eleman_bulucu(s1, s2):
    s1, s2 = s1.split(), s2.split()

    sonuc = ""

    for eleman in s1:
        if eleman not in s2:
            sonuc += eleman + "\n"
            
    sonuc = sonuc[:-1]
    
    return sonuc

string1 = """
a
b
c
d
"""

string2 = """
b
d
"""
sonuc = benzersiz_eleman_bulucu(string1, string2)
print(sonuc)
a
c
  1. s1 ve s2’yi split() ile kelimelerine ayırıyoruz.
  2. s1’de bulunup da s2’de bulunmayan elemanları sonuc isimli bir yerel değişkende topluyoruz.
  3. Döngü bittikten sonra fazlalık olan “\n” kısmını, sonuc değişkenini sonuc[:-1]'e eşitleyerek kırpıyoruz.
3 Beğeni

Aman yarabbi bu ne hız hocam :smiley:

1 Beğeni

Aslında 30 dakikadır join() ile yapmaya çalışıyordum beceremedim :sweat_smile:

1 Beğeni

hahaha :grinning_face_with_smiling_eyes: haha bende farkında olmasam yazdığım kodlarda her halukarda atanan değerleri verdiğini görüyordum.

1 Beğeni
def find_difference(str1,str2):
    str1,str2 = set(str1),set(str2)
    fark = str1.difference(str2)
    print(fark)


str1 = """
yazbel
html
python
"""

str2 = """
html
python
"""

find_difference(str1,str2)

Tabii ben burada kelime bazlı yapmadım harf bazlı yaptım set veri tipine ait bazı fonksiyonları kullanarak

1 Beğeni

string2’de y ve l de var. O halde sonuc azbe olmali?

Bu mantiksiz geliyosa string dogru data turu degil. Cevaplarin hepsinin ilk is split kullanarak string’leri listeye cevirdigini de goz onunde bulundurursak, bu problem bir liste problemi.

liste1 = [ "yazbel", "html", "python" ]
liste2 = [ "html", "python" ]

Aslina bakarsan istedigin islem en cok kumelerde anlam kazaniyor, hatta basit bir fark islemi:

print(set(liste1) - set(liste2)) #{'yazbel'}

Listelerin kumelerden farkini dusundugumuzde de soruda belirtilmemis edge case’ler cikiyor:

liste1 = [ "1", "ortak", "2", "ortak", "3", "ortak", "4", "5" ]
liste2 = [ "ortak", "4", "4" ]

Sonuc ne olacak?

3 Beğeni

Liste 2 listeye çevrildiğinde ["ortak","4"] şeklinde olmayacak mı ?
Dolayısıyla liste 1 ile karşılaştırıldığında yine 4 yok olacak. Aynı durum liste1 için de geçerli ortakların hepsi tek bir şekilde düşünülmez mi ?
Çünkü matematik derslerinde bizlere kümelerde özdeş elemanlar olamaz öğretildi.
Bu durum da programlamaya yansımayacak mıdır ?

image
Görüldüğü üzere 4 ve ortak yok

Ki
image
istediğimiz kadar ortak yazalım set fonksiyonu sadece birini alıyor

Kumeye cevrildiginde, evet. Fakat soru listeler icin gibi duruyor.

Dikkat edersen yazdigim(iz) kodun sonucunu sormuyorum; onu calistirip da gorebilirdim. Gereksinimleri veren kisinin edge case’leri dusunup dusunmedigini, bu durumlarda nasil cevaplar bekledigini (veya beklemedigini) soruyorum.

2 Beğeni

Hocam bu kadar basit miydi :cry:
Şu döngülerden bir türlü kurtulamıyorum :expressionless:

Basit olması aslında bizim elimizde ne kadar çok sade düşünürsek o kadar kolay çözüme ulaşabiliriz

2 Beğeni

Maalesef harf bazlı olduğu için aradığım sonucu vermedi.

@Arif_RYG ve @Gok_Mavisi_Anka nın yöntemleri işime yaradı, ayrıca gerçekten bu kadar hızlı cevap beklemiyordum bi girdim 11 cevap var :smiley: ben daha 15dk geçti sanarken 2 saat geçtiğini farkettim.

Doğru, bunu hiç düşünmemiştim. Listeler ile olabileceğini tahmin ettim ancak emin değildim ve sanırım listeler ile yapmak problemi çözüyor. Zaten işe yarayan sonuçların kodlarını incelerken hepsinin listeler ile çalıştığını farkettim. Ayrıca sayenizde edge case nin de ne anlama geldiğini öğrenmiş oldum sağolun :slight_smile:

Beklediğiniz sonuç yazdığım sorudaki gibiyse sonucun [“1”, “2”, “3”, "“5”] çıkması lazım.
Not: {‘1’, ‘3’, ‘5’, ‘2’} çıktı ancak neden [ ve ] arasına değil de { ve } arasına aldı anlamadım.

Harbi ya sanki döngüden başka yol yokmuş gibi geliyor (gerçi büyük ihtimalle set fonksiyonuda döngü kullanıyodur ama en azından bizi döngü yazmakla uğraştırmaz)

1 Beğeni