Как расположить элементы в алфавитном порядке между каждым вхождением определенного элемента? - PullRequest
0 голосов
/ 21 декабря 2018

Я работаю над этой конкретной проблемой уже несколько часов, и не очень много придумаю.

Предположим, у меня есть:

a = ['ot=apple', 'zz=top', 'par=four', 'xyz_test=wff', 'sesh=232d23f23f33ff', 
     '\n', 'xt=cal', 'poss=33', '\n', 'val=fifty', 'dvx=32f23f2', 
     '\n','dsfad=www', 'orr=dsav']

b = '\n'

Как мне по алфавитусортировка a между каждым вхождением b?

т.е. как я могу вернуть:

a = ['ot=apple', 'par=four', 'sesh=232d23f23f33ff','xyz_test=wff', 'zz=top', 
     '\n', 'poss=33','xt=cal', '\n', 'dvx=32f23f2','val=fifty', 
     '\n','dsfad=www', 'orr=dsav']

Я успешно использую:

    e_ = 0
    while e_ < len(new_list):
        new_list[e_] = sorted(new_list[e_], key=str.lower)
        e_ = e_+1

для сортировки других списков, но я не уверен, как это сделатьэто в этом случае, когда это зависит от появления '\n'.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018
# create sublist
c = []
temp = []

for aa in a:
    if aa != b:
        temp += [aa]
    else:
        c += [temp]
        temp = []
        c += [b]
#sort and unravel
c = [sorted(i) for i in c]
d = [j for i in c for j in i]

print(d)
['ot=apple',
 'par=four',
 'sesh=232d23f23f33ff',
 'xyz_test=wff',
 'zz=top',
 '\n',
 'poss=33',
 'xt=cal',
 '\n',
 'dvx=32f23f2',
 'val=fifty',
 '\n']
0 голосов
/ 21 декабря 2018

Вы можете разбить свой 1-мерный список на списки списков - каждый раз, когда '\n' происходит, когда вы начинаете новый внутренний список - затем сортируйте внутренние и рекомбинируйте их:

a = ['ot=apple', 'zz=top', 'par=four', 'xyz_test=wff', 'sesh=232d23f23f33ff', 
     '\n', 'xt=cal', 'poss=33', '\n', 'val=fifty', 'dvx=32f23f2', 
     '\n','dsfad=www', 'orr=dsav']

b = '\n'

# partition your data into sublists
stacked = [[]]
for k in a:
    if k == b:
        stacked.append([])
    else:
        stacked[-1].append(k)

# remove empty list at end if present
if not stacked[-1]:
    stacked = stacked[:-1]

# sort each inner list
for sublist in stacked:
    sublist.sort()

# unstack again
retval = []
for k in stacked:
    retval.append(b) # add a \n
    retval.extend(k) # extend with the sublist

# remove the first \n
retval = retval[1:]

print a 
print stacked 
print retval 

Вывод:

# a
['ot=apple', 'zz=top', 'par=four', 'xyz_test=wff', 'sesh=232d23f23f33ff', '\n', 'xt=cal', 
 'poss=33', '\n', 'val=fifty', 'dvx=32f23f2', '\n', 'dsfad=www', 'orr=dsav']

# stacked 
[['ot=apple', 'par=four', 'sesh=232d23f23f33ff', 'xyz_test=wff', 'zz=top'], ['poss=33', 'xt=cal'], 
 ['dvx=32f23f2', 'val=fifty'], ['dsfad=www', 'orr=dsav']]

# retval
['ot=apple', 'par=four', 'sesh=232d23f23f33ff', 'xyz_test=wff', 'zz=top', '\n', 
 'poss=33', 'xt=cal', '\n', 'dvx=32f23f2', 'val=fifty', '\n', 'dsfad=www', 'orr=dsav']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...