Saya mencoba memahami jika masuk akal untuk mengambil konten dari daftar dan menambahkannya ke daftar lain.
Saya memiliki daftar pertama yang dibuat melalui fungsi loop, yang akan mendapatkan baris tertentu dari file dan akan menyimpannya dalam daftar.
Kemudian daftar kedua digunakan untuk menyimpan baris-baris ini, dan memulai siklus baru di atas file lain.
Gagasan saya adalah untuk mendapatkan daftar setelah siklus selesai, masukkan ke daftar kedua, kemudian mulai siklus baru, buang konten dari daftar pertama lagi ke yang kedua tetapi menambahkannya, sehingga daftar kedua akan menjadi jumlah semua file daftar kecil yang dibuat di loop saya. Daftar harus ditambahkan hanya jika kondisi tertentu terpenuhi.
Sepertinya ini mirip dengan ini:
# This is done for each log in my directory, i have a loop running
for logs in mydir:
for line in mylog:
#...if the conditions are met
list1.append(line)
for item in list1:
if "string" in item: #if somewhere in the list1 i have a match for a string
list2.append(list1) # append every line in list1 to list2
del list1 [:] # delete the content of the list1
break
else:
del list1 [:] # delete the list content and start all over
Apakah ini masuk akal atau saya harus pergi untuk rute yang berbeda?
Saya memerlukan sesuatu yang efisien yang tidak akan memakan banyak siklus, karena daftar log panjang dan setiap file teks cukup besar; jadi saya pikir daftar itu sesuai dengan tujuannya.
Lihatlah itertools.chain untuk cara cepat memperlakukan banyak daftar kecil sebagai satu daftar besar (atau setidaknya sebagai satu besar yang dapat diubah) tanpa menyalin daftar yang lebih kecil:
sumber
Tampaknya cukup masuk akal untuk apa yang Anda coba lakukan.
Versi yang sedikit lebih pendek yang bersandar pada Python untuk melakukan lebih banyak tugas berat mungkin:
The
(True for line in list1 if "string" in line)
iterates ataslist
dan memancarkanTrue
setiap kali kecocokan ditemukan.any()
menggunakan evaluasi hubung singkat untuk kembaliTrue
segera setelahTrue
elemen pertama ditemukan.list2.extend()
menambahkan kontenlist1
hingga akhir.sumber
any(True for line in list1 if "string" in line)
lebih rapi ditulis sebagaiany("string" in line for line in list1)
.any
terima generator; tidak ada daftar nilai Benar atau Salah dibangun di mana saja. Versi saya mengembalikan lebih banyak hal untukany
diperiksa, tetapi sebagai imbalan karena tidak melakukan pemeriksaan yang sama di generator itu sendiri. Saya membayangkan ini adalah pencucian, tetapitimeit
otoritatif di sini, bukan saya. :)Anda juga dapat menggabungkan dua daftar (misalnya a, b) menggunakan operator '+'. Sebagai contoh,
sumber
Untuk meringkas jawaban sebelumnya. Jika Anda memiliki daftar dengan
[0,1,2]
dan satu lagi dengan[3,4,5]
dan Anda ingin menggabungkannya, maka itu menjadi[0,1,2,3,4,5]
, Anda dapat menggunakanchaining
atauextending
dan harus mengetahui perbedaan untuk menggunakannya secara bijak untuk kebutuhan Anda.Memperluas daftar
Menggunakan metode
list
kelasextend
, Anda dapat melakukan salinan elemen dari satu daftar ke yang lain. Namun ini akan menyebabkan penggunaan memori ekstra, yang seharusnya baik-baik saja dalam kebanyakan kasus, tetapi dapat menyebabkan masalah jika Anda ingin menjadi efisien memori.Daftar chaining
Sebaliknya Anda dapat menggunakan
itertools.chain
untuk mentransfer banyak daftar, yang akan mengembalikan apa yang disebutiterator
dapat digunakan untuk beralih di atas daftar. Ini lebih hemat memori karena tidak menyalin elemen tetapi hanya menunjuk ke daftar berikutnya.sumber
Menggunakan fungsi
map()
danreduce()
bawaanMinimal "untuk pengulangan" dan pola pengkodean yang elegan :)
sumber
Jika kami memiliki daftar seperti di bawah ini:
dua cara untuk menyalinnya ke daftar lain.
1.
2.
sumber