Найти - Пользователи
Полная версия: Сортировка по букве
Начало » Python для новичков » Сортировка по букве
1
coconoko
Нужна помощь!

Есть список. Нужно отсортировать его в алфавитном порядке, но вперёд вытащить все слова с буквой f.

Что я делаю не так?

s = ['sdf', 'avrb', 'yoljur', 'abdghf', 'yuegvx']
s1 = []
s2 = []
l = len(s)
s.sort()
for k in range (l):
    k = s.pop()
    if ()=='f':
        s1.append(k)
    else:
        s2.append(k)

Должно получиться так:
s = ['sdf', 'asdghf', 'abdghf', 'avrb', 'yuegvx']
smoke853
как то так:
s = ['sdf', 'avrb', 'yoljur', 'abdghf', 'yuegvx', 'asdsa', 'mgfh']
s1, s2 = [], []
for i in sorted(s):
    if i.count('f'):
        s1.append(i)
    else:
        s2.append(i)
print s1 + s2
pyuser
без явного создания промежуточных списков
для третьего питона
print(sorted(filter(lambda x: "f" in x, s)) + sorted(filter(lambda x: "f" not in x, s)))
для второго питона
from itertools import ifilter
print(sorted(ifilter(lambda x: "f" in x, s)) + sorted(ifilter(lambda x: "f" not in x, s)))
coconoko
Большое спасибо, smoke853 и pyuser, вы помогли мне разобраться.
reclosedev
У sort() есть волшебный аргумент key:
s = ['sdf', 'avrb', 'yoljur', 'abdghf', 'yuegvx']
s.sort(key=lambda x: (not 'f' in x, x))
print(s)
Почитать можно тут http://wiki.python.org/moin/HowTo/Sorting/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB