it-swarm-id.com

Bagaimana saya bisa menghapus kata duplikat dalam sebuah string dengan Python?

Contoh berikut:

string1 = "calvin klein design dress calvin klein"

Bagaimana saya bisa menghapus dua duplikat kedua "calvin" dan "klein"?

Hasilnya akan terlihat seperti

string2 = "calvin klein design dress"

hanya duplikat kedua yang harus dihapus dan urutan kata-kata tidak boleh diubah!

16
burner007
def unique_list(l):
    ulist = []
    [ulist.append(x) for x in l if x not in ulist]
    return ulist

a="calvin klein design dress calvin klein"
a=' '.join(unique_list(a.split()))
15
spicavigo
string1 = "calvin klein design dress calvin klein"
words = string1.split()
print (" ".join(sorted(set(words), key=words.index)))

Ini mengurutkan set semua kata (unik) dalam string Anda dengan indeks Word dalam daftar kata asli.

29
Markus

Dalam Python 2.7+, Anda bisa menggunakan collections.OrderedDict untuk ini:

from collections import OrderedDict
s = "calvin klein design dress calvin klein"
print ' '.join(OrderedDict((w,w) for w in s.split()).keys())
7
NPE

Potong dan tempel dari resep itertools

from itertools import ifilterfalse

def unique_everseen(iterable, key=None):
    "List unique elements, preserving order. Remember all elements ever seen."
    # unique_everseen('AAAABBBCCDAABBB') --> A B C D
    # unique_everseen('ABBCcAD', str.lower) --> A B C D
    seen = set()
    seen_add = seen.add
    if key is None:
        for element in ifilterfalse(seen.__contains__, iterable):
            seen_add(element)
            yield element
    else:
        for element in iterable:
            k = key(element)
            if k not in seen:
                seen_add(k)
                yield element

Saya benar-benar berharap mereka bisa melanjutkan dan membuat modul dari resep itu segera. Saya sangat ingin dapat melakukan from itertools_recipes import unique_everseen daripada menggunakan cut-and-paste setiap kali saya membutuhkan sesuatu.

Gunakan seperti ini:

def unique_words(string, ignore_case=False):
    key = None
    if ignore_case:
        key = str.lower
    return " ".join(unique_everseen(string.split(), key=key))

string2 = unique_words(string1)
7
string = 'calvin klein design dress calvin klein'

def uniquify(string):
    output = []
    seen = set()
    for Word in string.split():
        if Word not in seen:
            output.append(Word)
            seen.add(Word)
    return ' '.join(output)

print uniquify(string)
5
ekhumoro

Anda dapat menggunakan satu set untuk melacak kata-kata yang sudah diproses.

words = set()
result = ''
for Word in string1.split():
    if Word not in words:
        result = result + Word + ' '
        words.add(Word)
print result
2
Pablo Santa Cruz

Anda bisa melakukannya hanya dengan mendapatkan set yang terkait dengan string, yang merupakan objek matematika yang tidak mengandung elemen berulang menurut definisi. Cukuplah untuk menggabungkan kata-kata dalam set kembali ke string: 

def remove_duplicate_words(string):
    return ' '.join(set(string.split()))
0
Mffd4n1

Pertanyaan: Hapus duplikat dalam sebuah string

 from _collections import OrderedDict

    a = "Gina Gini Gini Protijayi"

    aa = OrderedDict().fromkeys(a.split())
    print(' '.join(aa))
   # output => Gina Gini Protijayi
0
Soudipta Dutta

11 dan 2 bekerja dengan sempurna:

    s="the sky is blue very blue"
    s=s.lower()
    slist = s.split()
    print " ".join(sorted(set(slist), key=slist.index))

dan 2

    s="the sky is blue very blue"
    s=s.lower()
    slist = s.split()
    print " ".join(sorted(set(slist), key=slist.index))
0
the chib

Beberapa jawaban cukup dekat dengan ini tetapi belum berakhir di mana saya melakukannya:

def uniques( your_string ):    
    seen = set()
    return ' '.join( seen.add(i) or i for i in your_string.split() if i not in seen )

Tentu saja, jika Anda menginginkannya sedikit lebih bersih atau lebih cepat, kami dapat melakukan refactor sedikit:

def uniques( your_string ):    
    words = your_string.split()

    seen = set()
    seen_add = seen.add

    def add(x):
        seen_add(x)  
        return x

    return ' '.join( add(i) for i in words if i not in seen )

Saya pikir versi kedua adalah sebagai pemain yang Anda bisa dapatkan dalam jumlah kecil kode. (Lebih banyak kode dapat digunakan untuk melakukan semua pekerjaan dalam satu pemindaian di seluruh string input tetapi untuk sebagian besar beban kerja, ini harus cukup.)

0
Chris Phillips

Anda dapat menghapus duplikat atau kata-kata yang diulang dari file teks atau string menggunakan kode berikut - 

from collections import Counter
for lines in all_words:

    line=''.join(lines.lower())
    new_data1=' '.join(lemmatize_sentence(line))
    new_data2 = Word_tokenize(new_data1)
    new_data3=nltk.pos_tag(new_data2)

    # below code is for removal of repeated words

    for i in range(0, len(new_data3)):
        new_data3[i] = "".join(new_data3[i])
    UniqW = Counter(new_data3)
    new_data5 = " ".join(UniqW.keys())
    print (new_data5)


    new_data.append(new_data5)


print (new_data)

P.S. -Apakah identifikasi sesuai yang diperlukan. Semoga ini bisa membantu !!!

0
rahul ranjan