Форум сайта python.su
0
Нужна помощь!
Есть список. Нужно отсортировать его в алфавитном порядке, но вперёд вытащить все слова с буквой 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']
Офлайн
15
как то так:
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
Отредактировано smoke853 (Дек. 4, 2012 01:51:16)
Офлайн
36
без явного создания промежуточных списков
для третьего питона
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)))
Офлайн
0
Большое спасибо, smoke853 и pyuser, вы помогли мне разобраться.
Отредактировано coconoko (Дек. 4, 2012 03:10:49)
Офлайн
173
У sort() есть волшебный аргумент key:
s = ['sdf', 'avrb', 'yoljur', 'abdghf', 'yuegvx'] s.sort(key=lambda x: (not 'f' in x, x)) print(s)
Офлайн