Sebagai bagian dari kelas yang lebih luas, saya mencoba menghapus item dalam daftar berdasarkan namanya saat dipanggil.

Saat ini saya memiliki kode yang seperti berikut:

users = [["Engineer", "Joe Blogs"], ["Scientist", "John Doe"]]
# many line of code later

def deleteName(name):

    for items in users:
        for values in items:
            if name in items:

                job = items[0]
                firstLastName = items[1]

                items.remove(job)
                items.remove(firstLastName)

                print(users)

Pada titik print(users), semuanya berfungsi sebagaimana mestinya. Tetapi segera setelah saya mencoba mengembalikan daftar yang diubah, saya mendapatkan daftar yang tidak berubah lagi. Saya mengerti ini tentang ruang lingkup, tetapi saya tidak tahu bagaimana menyelesaikannya.

users sedang digunakan oleh kode lain.

0
Shikari 12 Mei 2021, 00:37

3 jawaban

Jawaban Terbaik

Satu-satunya masalah yang saya lihat di sini adalah Anda tidak menghapus item dari daftar pengguna - jika Anda mengulangi daftar dan menghitungnya misalnya daftar tidak akan menyusut, jadi Anda perlu menghapus seluruh item dari daftar

  users = [["Engineer", "Joe Blogs"], ["Scientist", "John Doe"]]
    # many line of code later
    
    def deleteName(name):
    
        for items in users:
            for values in items:
                if name in items:
    
                    job = items[0]
                    firstLastName = items[1]
    
                    items.remove(job)
                    items.remove(firstLastName)
                    users.remove(items) // NB
                    print(users)
                    
    deleteName("John Doe")
    deleteName("Joe Blogs")

Contoh di atas ini berfungsi seperti yang diharapkan - dapatkah Anda memberikan daftar hasil Anda?

0
Gabriel 11 Mei 2021, 22:10

Anda tidak menghapus items, tetapi Anda menyimpan daftar kosong. Saya tidak berpikir itu adalah niat Anda ketika saya membaca pertanyaan Anda. Jadi menghapus bahwa Anda dapat menggunakan users.remove(items) dalam kode Anda. Selain itu Anda juga mengulang values tanpa menggunakan values nanti, daripada tidak menggunakan loop itu.

Berdasarkan kode Anda:

users = [["Engineer", "Joe Blogs"], ["Scientist", "John Doe"]]
# many line of code later

def deleteName(name):

    for items in users:
        if name in items:
            users.remove(items)

deleteName("Joe Blogs")
print(users)

Keluaran:

[["Scientist", "John Doe"]]

Jika Anda ingin agar users tidak berubah dalam proses, Anda dapat menggunakan fungsi lambda dengan filter:

>> filter(lambda items: "Joe Blogs" not in items, users)
[["Scientist", "John Doe"]]
0
MogaGennis 11 Mei 2021, 22:32

Ini bekerja. Sebagai catatan, saya menyarankan Anda untuk tidak menggunakan variabel global (pengguna) di dalam fungsi, cukup berikan sebagai parameter jika Anda membutuhkannya.

users = [["Engineer", "Joe Blogs"], ["Scientist", "John Doe"]]
# many line of code later


def deleteName(name, users):

    for items in users:

        _, firstLastName = items
        if firstLastName == name:

            users.remove(items)


deleteName("Joe Blogs", users)
print(users)
0
Matteo Zanoni 11 Mei 2021, 21:46