python - एक सूची के तत्वों को जोड़ना अगर उन तत्वों को दो व्हाट्सएप के बीच में है




list join (5)

तुम यह केर सकते हो:

a = ['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
indx = ['' == k for k in a]
indx = [i for i, x in enumerate(indx) if x] # get the indices.
a_merged = a[0:indx[0]] + [''.join(a[indx[i]:indx[i+1]]) for i in range(len(indx)) if i < len(indx)-1] + a[indx[-1]+1:] # merge the list

आउटपुट:

['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']

टिप्पणियों के बाद संपादित करें:

a = ['assembly', '','',  'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
indx = [i for i, x in enumerate(a) if x == ''] # get the indices where '' occurs in the original list. 
a_merged = a[0:indx[0]] + [''.join(a[indx[i]:indx[i+1]]) for i in range(len(indx)) if i < len(indx)-1 and indx[i+1] -indx[i] > 1] + a[indx[-1]+1:]
a_merged

आउटपुट:

['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']

मेरे पास इस तरह का एक इनपुट है:

['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']

मैं इस तरह के आउटपुट के लिए '' बीच तत्वों को जोड़ना चाहता हूं:

['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']

मैंने इस तरह से join और सूची बनाने की कोशिश की:

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++']

यह कुछ हद तक काम करता है, लेकिन मुझे नहीं पता कि इस निर्देश को पूरी सूची के लिए कैसे बनाया जाए।


बहुत पुराना है, लेकिन अभी भी उपयोगी है:

from itertools import groupby

lst = ['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']

new_lst = [''.join(values)
           for key, values in groupby(lst, key = lambda x: x == '')
           if not key]
print(new_lst)

यह प्रदान करता है

['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']

यदि इनपुट डेलिमिटर वास्तव में खाली तार हैं, तो आप कर सकते हैं

strlist = [x or ' ' for x in a]
joined = ''.join(strlist).split()
joined
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']

यह भयावह और हैकरी है, लेकिन

lambda b:lambda l:''.join(i or b for i in l).split(b)

ऐसी कोई भी स्ट्रिंग ले सकते हैं जिसकी आप गारंटी दे सकते हैं कि वह सूची में शामिल नहीं है, और जो आप चाहते हैं वह एक फ़ंक्शन लौटाएं। बेशक, आप शायद अपनी विशिष्ट स्थिति के लिए केवल एक या दो बार इसका उपयोग करना चाहते हैं, इसलिए, यदि आप यह गारंटी दे सकते हैं कि सूची के किसी भी तत्व में कोई स्थान नहीं है, तो यह अधिक दिख सकता है:

a = ['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
a = ''.join(i or ' ' for i in a).split(' ')

itertools.groupby का उपयोग करना:

from itertools import groupby

l = ['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
new_l = [''.join(g) for k, g in groupby(l, key = bool) if k]

आउटपुट:

['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']






whitespace