python - ضم عناصر القائمة إذا كانت هذه العناصر بين فضاءتين أبيضتين




list join (5)

إذا كانت محددات الإدخال عبارة عن سلاسل فارغة بالفعل ، فيمكنك القيام بذلك

strlist = [x or ' ' for x in a]
joined = ''.join(strlist).split()
joined
['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++']

هذا يعمل إلى حد ما لكنني لا أعرف كيفية تكرار هذه التعليمات للقائمة الكاملة.


إذا كنت لا تستطيع أو لا تريد استخدام أدوات itertools:

l = ['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
l_new = []
combined = ""
for idx, s in enumerate(l):
    if s != "":
        combined += s
        if idx == len(l)-1:
            l_new.append(combined)

    else:
        l_new.append(combined)
        combined = ""

تشغيل حلقة فوق القائمة
داخل الحلقة ، قم بإلحاق العنصر بسلسلة فارغة مؤقتة وتحقق من حالة ما إذا كان العنصر عبارة عن سلسلة فارغة أو العنصر الأخير من القائمة ، إذا كان ذلك صحيحًا ، فقم بإلحاق المتغير المؤقت بقائمة الإخراج وتغيير قيمة هذا المتغير إلى فارغ خيط
الشفرة:

x=['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
temp=''
output=[]
for y in x:
    temp=temp+y
    if y=='' or y==x[-1]:
        output.append(temp)
        temp=''

print(output)

الإخراج: ['assembly', 'python', 'java', 'ruby', 'javascript', '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++']

يمكنك القيام بالأمر:

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






whitespace