Saya punya input seperti ini:
['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
Saya ingin bergabung antara elemen ''
untuk memiliki output seperti ini:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
Saya mencoba menggunakan join
dan mendaftar slicing seperti ini:
a=['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
a[2:5] = [''.join(a[ 2: 5])]
a=['assembly', '', 'python', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
Ini berfungsi sampai batas tertentu tetapi saya tidak tahu bagaimana cara mengulangi instruksi ini untuk seluruh daftar.
Ini mengerikan dan berantakan, tetapi
dapat mengambil string apa pun yang Anda dapat menjamin tidak terkandung dalam daftar, dan mengembalikan fungsi melakukan apa yang Anda inginkan. Tentu saja, Anda mungkin ingin hanya menggunakan ini sekali atau dua kali untuk situasi spesifik Anda, jadi, jika Anda dapat menjamin bahwa tidak ada elemen daftar yang berisi spasi, ini mungkin terlihat seperti:
sumber
Jika Anda tidak dapat atau tidak ingin menggunakan itertools:
sumber
Kamu bisa melakukan ini:
Keluaran:
Edit setelah komentar:
Keluaran:
sumber
# get the indices.
bukan komentar yang sangat berguna. Saya sarankan Anda membuatnya berguna (misalnyafilter the indices to keep only those that correspond to whitespace
), atau menghapusnya sama sekali.indices = [i for s in a if s == '']
?indx = [i for i, x in enumerate(a) if x == '']
a = ['asse','mbly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c+', '+']
tetapi sepertinya Anda dapat meningkatkan baris 3 Anda dengan menambahkan daftar dengan string nol di ujungenumerate([''] + a + [''])
kemudian menghapusa[0:indx[0]]
dana[indx[-1]+1:]
pada baris Anda 4. Ini masih tidak menjelaskan apakah ada dua string nol tepat di sebelah satu sama lain meskipunJika pembatas input sebenarnya adalah string kosong, maka Anda dapat melakukannya
sumber
Cukup tua tetapi masih bermanfaat:
Ini menghasilkan
sumber
menjalankan loop di atas daftar
di dalam loop menambahkan elemen ke string kosong sementara dan memeriksa kondisi apakah elemen tersebut adalah string kosong atau elemen terakhir dari daftar, jika benar maka tambahkan variabel sementara ke daftar output dan ubah nilainya. variabel itu ke Kode string kosong
:
Keluaran:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
sumber
Saya setuju bahwa jawaban Cris menggunakan pendekatan python yang paling , tetapi akan lebih baik untuk mengadaptasi jawaban Cris sedikit. Alih-alih menggunakan
groupby(l,key = bool)
untuk menggunakangroupby(l, key = lambda x: x !='')
dan menyingkirkan ambiguitas yang tidak perluNB Saya hanya menulis jawaban baru karena saya tidak memiliki reputasi yang cukup untuk menulis komentar tentang jawaban Cris .
sumber
Versi lain yang berfungsi, dengan hanya loop / tes dasar:
sumber