Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Python - Alih keluar subsenarai yang wujud dalam subsenarai lain

Python - Alih keluar subsenarai yang wujud dalam subsenarai lain

王林
王林ke hadapan
2023-09-18 18:53:08936semak imbas

Python - 删除在另一个子列表中存在的子列表

Python ialah perisian yang digunakan secara meluas yang mempunyai pelbagai tujuan dan pelbagai fungsi untuk melaksanakan tugas yang berbeza. Satu ciri berguna python ialah kefungsian senarai yang membantu dalam mengumpul dan menyimpan data yang berbeza tetapi banyak kali pengguna menghadapi masalah semasa memadamkan subsenarai yang sudah wujud dalam subsenarai lain. Jadi, dalam artikel ini, kita akan belajar cara memadamkan subsenarai berbeza yang sudah wujud dalam subsenarai lain.

Untuk memahami masalah dengan jelas, mari kita ambil contoh di mana kita perlu memadamkan subsenarai yang datanya sudah wujud dalam subsenarai lain.

Contoh

duplicate_list = [[Aayush, Shyam, John], [Shyam, John], [Henry, Joe], [David, Stefen, Damon], [David, Stefen]]
#All the sublist whose data is already present in other sublist are to be removed

Output

Subsenarai bernama [Shyam,John] dan [David,Stefan] sudah mempunyai data yang sama dalam subsenarai lain, jadi subsenarai tambahan ini akan dipadamkan. Output sepatutnya kelihatan seperti ini:

new_list = [[Aayush, Shyam, John], [Henry, Joe], [David, Stefen, Damon]]

Sekarang kita akan belajar tentang cara berbeza untuk memadamkan subsenarai yang sudah wujud dalam subsenarai.

Di sini kami telah menyebut kaedah yang mungkin berbeza:

Senaraikan pemahaman

Cara paling mudah untuk memadam semua subsenarai yang terdapat dalam subsenarai lain adalah dengan bantuan pemahaman senarai. Semak semua subsenarai yang wujud dalam senarai dan salin yang tidak wujud dalam mana-mana subsenarai lain ke senarai baharu. Mari kita ambil contoh untuk memahami dengan lebih jelas:

Contoh

duplicate_list = [[Aayush, Shyam, John], [Shyam, John], [Henry, Joe], [David, Stefen, Damon], [David, Stefen]]
New_list = [sublist for sublist in duplicate_list if not any(set(sublist) <= set(other) for other in duplicate_list if sublist is not other)]
#We first check all the lists of the duplicate list through the any() function and then we check for any repeatation with the help of <= operator

Output

Selepas kod selesai, kami akan mencetak output kod di atas. Output kod di atas adalah seperti berikut:

[[Aayush, Shyam, John], [Henry, Joe], [David, Stefen, Damon]]

Semua subsenarai tambahan telah dialih keluar, jadi kami menulis kod yang betul untuk mengalih keluar subsenarai yang sudah ada dalam subsenarai.

Tentukan fungsi

Cara lain untuk menyelesaikan masalah ini ialah dengan mencipta fungsi berasingan yang benar-benar baharu yang menapis semua subsenarai yang wujud dalam subsenarai lain. Ini boleh dilakukan dengan menentukan syarat untuk fungsi dan membiarkannya berjalan dengan sewajarnya.

Contoh

def is_sublist(sublist, other):  #is_sublist is the function defined
    return set(sublist) <= set(other)  #the functions checks 2 sublists at a time and if the sublist already exists then it returns with `true` feedback and does not consider the extra sublist

duplicate_list = [[Aayush, Shyam, John], [Shyam, John], [Henry, Joe], [David, Stefen, Damon], [David, Stefen]]
new_list = [sublist for sublist in duplicate_list if not any(is_sublist(sublist, other) for other in duplicate_list if sublist is not other)]

Output

Keluaran kod di atas adalah seperti berikut:

[[Aayush, Shyam, John], [Henry, Joe], [David, Stefen, Damon]]

Semua subsenarai tambahan dialih keluar, jadi kami menulis kod yang betul untuk mengalih keluar semua subsenarai tambahan.

Bandingkan setiap senarai

Ini ialah kaedah yang sangat kompleks untuk memadamkan subsenarai yang sudah wujud dalam subsenarai lain. Dalam kaedah ini, semua subsenarai dibandingkan antara satu sama lain dan subsenarai bukan pendua disalin ke senarai baharu. Kita boleh memahami perkara ini dengan bantuan contoh berikut:

Contoh

duplicate_list = [[Aayush, Shyam, John], [Shyam, John], [Henry, Joe], [David, Stefen, Damon], [David, Stefen]]
#A copy of duplicate list is created to avoid any errors in the original file
new_list = duplicate_list[:]

#Check each sublist present in the new_list
for sublist in duplicate_list:
    for other in new_list:
        # Checking of presence of sublist present in other sublist is done
        if sublist != other and set(sublist).issubset(other):   #issubset is used to check presence of one sublist in another sublist
            # Remove all the repeating sublist
            new_list.remove(sublist)
            break  #break is used to stop the loop so that it does not keep checking continuosly

print(new_list)

Output

Keluaran kod di atas adalah seperti berikut:

[[Aayush, Shyam, John], [Henry, Joe], [David, Stefen, Damon]]

Kaedah ini lebih sesuai apabila senarai terlalu panjang dan mengandungi sejumlah besar subsenarai dengan banyak elemen.

Sediakan operasi

Dalam operasi ini, subsenarai yang sedia ada dalam subsenarai lain dipadamkan dengan bantuan operasi set. Dalam pendekatan ini kita boleh menukar setiap subsenarai dalam senarai kepada satu set dan dengan bantuan operasi yang berbeza kita boleh mengalih keluar semua subsenarai yang terdapat dalam subsenarai lain. Kita boleh memahaminya dengan lebih jelas melalui contoh berikut:

Contoh

duplicate_list = [[Aayush, Shyam, John], [Shyam, John], [Henry, Joe], [David, Stefen, Damon], [David, Stefen]]

new_list = []

for sublist in duplicate_list:
    is_subset = False
    for other in duplicate_list:
        if sublist != other and set(sublist).difference(set(other)) == set():  #The difference operation is used to calculate the difference betwen two sets
            is_subset = True  #When the sublist is present in another sublist the result of is_subset will be true 
            break  #Once the result is found to be true, the loop is broke and all the other sublist are copied into the new_list
    if not is_subset:
        new_list.append(sublist)

print(new_list)

Output

Keluaran kod di atas adalah seperti berikut:

[[Aayush, Shyam, John], [Henry, Joe], [David, Stefen, Damon]]

Semua subsenarai yang terdapat dalam subsenarai lain telah dipadamkan.

Kesimpulan

Masalah memadamkan subsenarai yang sudah wujud dalam subsenarai lain adalah masalah yang sering dihadapi oleh pengguna, dan banyak kali ia mengakibatkan memakan banyak masa pengguna. Oleh itu, adalah mungkin untuk memadamkan semua subsenarai dengan cepat yang wujud dalam subsenarai lain menggunakan kaedah berbeza yang dicadangkan dalam artikel sebelumnya.

Atas ialah kandungan terperinci Python - Alih keluar subsenarai yang wujud dalam subsenarai lain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam