Форум сайта python.su
173
Я понял так
def strange_sort(items): unique = sorted(set(items)) return [unique[i % len(unique)] for i in range(len(items))] items = [1, 2, 2, 2, 2, 1, 1, 1, 3, 3, 3, 3] print strange_sort(items) # [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
Отредактировано reclosedev (Март 22, 2013 23:08:23)
Офлайн
173
Если количество может быть разным:
from collections import Counter def strange_sort(items): count = Counter(items) unique = sorted(count.keys()) result = [] while count: for item in unique: count[item] -= 1 if count[item] < 0: del count[item] else: result.append(item) return result items = [1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 3, 3, 3, 3] print strange_sort(items) # [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 1, 1]
Офлайн
0
reclosedev
Спасибо большое, а то я уже столько вариантов пробовал но никак не получалось.
Это то что, надо включая второй результат поскольку есть вероятность разного количества.
Офлайн
857
>>> date = ['aaa', 'ddd', 'ddd', 'ddd', 'ddd', 'aaa', 'aaa', 'aaa', 'ccc', 'ccc', 'ccc', 'ccc'] >>> >>> def f(lst): ... out = [] ... uni = set() ... for i in lst: ... if i not in uni: ... uni.add(i) ... out.append(i) ... return len(lst) // len(out) * out ... >>> print(f(date)) ['aaa', 'ddd', 'ccc', 'aaa', 'ddd', 'ccc', 'aaa', 'ddd', 'ccc', 'aaa', 'ddd', 'ccc'] >>>
Офлайн
>>> from itertools import chain, izip_longest, groupby
>>> date = ['aaa', 'ddd', 'aaa', 'aaa', 'aaa', 'ccc', 'ccc']
>>> filter(None, chain.from_iterable(izip_longest(*(list(x[1]) for x in groupby(sorted(date))))))
['aaa', 'ccc', 'ddd', 'aaa', 'ccc', 'aaa', 'aaa'
Офлайн
857
ему надо a d c, а не a c d (это в первом сообщении)
Офлайн
173
Так и не понял какой результат нужен. Думаю, у py.user.next правильнее.
Для чего это используется?
Офлайн
0
Спасибо большое всем за помощь, самый нужный вариант написал lorien
Для чего это используется?
Офлайн