Я использую tabBarController, и у меня есть несколько разделов в табличном представлении на каждой вкладке, так что это лучшее решение для меня.
extension UITableView {
func scrollToTop(){
for index in 0...numberOfSections - 1 {
if numberOfSections > 0 && numberOfRows(inSection: index) > 0 {
scrollToRow(at: IndexPath(row: 0, section: index), at: .top, animated: true)
break
}
if index == numberOfSections - 1 {
setContentOffset(.zero, animated: true)
break
}
}
}
}
Вы можете иметь вложенные итерации в одном понимании списка:
[filename for path in dirs for filename in os.listdir(path)]
Вы могли бы просто сделать все напрямую:
subs = []
for d in dirs:
subs.extend(os.listdir(d))
Вы можете найти хороший ответ в рецептах itertools:
def flatten(listOfLists):
return list(chain.from_iterable(listOfLists))
(Примечание: требуется Python 2.6 +)
subs = []
map(subs.extend, (os.listdir(d) for d in dirs))
(но ответ Муравья лучше; +1 за него)
Вы можете объединить списки с помощью обычного оператора сложения:
>>> [1, 2] + [3, 4]
[1, 2, 3, 4]
Встроенная функция sum
добавит числа в последовательность и может, при желании, начать с определенного значения. :
>>> sum(xrange(10), 100)
145
Объедините приведенное выше, чтобы сгладить список списков:
>>> sum([[1, 2], [3, 4]], [])
[1, 2, 3, 4]
Теперь вы можете определить свою плоскую карту
:
>>> def flatmap(f, seq):
... return sum([f(s) for s in seq], [])
...
>>> flatmap(range, [1,2,3])
[0, 0, 1, 0, 1, 2]
Изменить: Я только что видел критику в комментариях к другой ответ , и я думаю, это правильно, что Python без нужды будет создавать и собирать мусор с помощью этого решения. Лучшее, что можно сказать об этом, - это то, что это очень просто и лаконично, если вы привыкли к функциональному программированию: -)
Вы можете попробовать itertools.chain ()
, например:
import itertools
import os
dirs = ["c:\\usr", "c:\\temp"]
subs = list(itertools.chain(*[os.listdir(d) for d in dirs]))
print subs
itertools.chain ()
возвращает итератор, следовательно, переход к list ()
.
Google предложил мне следующее решение:
def flatten(l):
if isinstance(l,list):
return sum(map(flatten,l))
else:
return l
Я начну с предположения, что и .NET, и Java имеют большие и эквивалентные поддерживающие инфраструктуры, API и т.д. Вы обладаете обширными знаниями .Net и должны изучить Java-эквиваленты некоторых подмножеств, чтобы реализовать их в Java.
Я ценю изучение чего-то нового очень высоко, поэтому я не вижу фундаментальной проблемы в переходе на Java. Но если «след» того, что вам нужно узнать, очень обширен, то он может оказаться в путь ваших реальных целей - что-то построить.
Поэтому я думаю, что один большой вопрос - это размер вашего учебного следа CMS. Я думаю, что CMS очень много о логике и структуры данных и, вероятно, только использует небольшой набор Java API - сеть и файл io, или базы данных, может быть? Любой пользовательский интерфейс может быть нейтральным для платформы Javascript/AJAX, возможно?
Основной альтернативой кажется Mono. Я не могу говорить с практиками работы под Моно, я предполагаю, что это вполне нормально. Например, поддерживается ли iSeries? Для тебя это имеет значение?
Моя личная предубежденность в том, что эмуляции, как правило, неудовлетворительны, всегда есть готча. Я бы поехал на Яву. Но потом я яванский парень...
-121--4055883- Для чего-либо, кроме базовых операций GET, встроенные функции java.net
HTTP не очень хороши. Для этого рекомендуется использовать Apache Commons (Клиент) . Это позволяет вам делать гораздо более интуитивные вещи, такие как:
PutMethod put = new PutMethod(url);
put.setRequestEntity(new FileRequestEntity(localFile, contentType));
int responseCode = put.executeMethod();
, который заменяет большую часть вашего кода котельной плиты.
-121--2639086->>> listOfLists = [[1, 2],[3, 4, 5], [6]]
>>> reduce(list.__add__, listOfLists)
[1, 2, 3, 4, 5, 6]
Я предполагаю, что решение itertools более эффективно, чем это, но это чувствует себя очень пифоническим и избегает необходимости импортировать библиотеку только ради операции с одним списком.