Я - новичок Python и одна из вещей, которые я пытаюсь сделать, перенос моя голова вокруг понимания списка. Я вижу, что это - довольно мощная функция, которую это стоит изучить.
cities = ['Chicago', 'Detroit', 'Atlanta']
airports = ['ORD', 'DTW', 'ATL']
print zip(cities,airports)
[('Chicago', 'ORD'), ('Detroit', 'DTW'), ('Atlanta', 'ATL')]
Как я использую понимание списка, таким образом, я могу получить результаты как ряд списков в рамках списка, а не серию кортежей в рамках списка?
[['Chicago', 'ORD'], ['Detroit', 'DTW'], ['Atlanta', 'ATL']]
(Я понимаю, что словари, вероятно, были бы более соответствующими в этой ситуации, но я просто пытаюсь понять списки немного лучше).Спасибо!
Что-то вроде этого:
[[c, a] for c, a in zip(cities, airports)]
Посноревно, конструктор
может преобразовать кортежи к списку:
[list(x) for x in zip(cities, airports)]
или функция
функция немного Менее многословие в этом случае:
map(list, zip(cities, airports))
Следуя ответу Райана я смог придумать этот простой сценарий, который итерирует через все подмодули и неглубокие их клоны:
#!/bin/bash
git submodule init
for i in $(git submodule | sed -e 's/.* //'); do
spath=$(git config -f .gitmodules --get submodule.$i.path)
surl=$(git config -f .gitmodules --get submodule.$i.url)
git clone --depth 1 $surl $spath
done
git submodule update
-121--2033654- Так что я не мог отпустить этот и нашел следующее:
Что вам нужно Более подробно это объясняется в http://unicode.org/reports/tr15/ (предупреждение, длинный и сухой документ)
Вот функция, которая выполняет разложение, а затем отфильтровывает все диакритические знаки. Вы можете использовать это, чтобы конвертировать Äpple в Apple, а затем использовать первую букву для построения индекса.
- (NSString*) decomposeAndFilterString: (NSString*) string
{
NSMutableString *decomposedString = [[string decomposedStringWithCanonicalMapping] mutableCopy];
NSCharacterSet *nonBaseSet = [NSCharacterSet nonBaseCharacterSet];
NSRange range = NSMakeRange([decomposedString length], 0);
while (range.location > 0) {
range = [decomposedString rangeOfCharacterFromSet:nonBaseSet
options:NSBackwardsSearch range:NSMakeRange(0, range.location)];
if (range.length == 0) {
break;
}
[decomposedString deleteCharactersInRange:range];
}
return [decomposedString autorelease];
}
(Я нашел этот код в списке рассылки, забыл источник, но взял его и немного исправил)
-121--2501868-Если бы вы хотели сделать это без использования застежка -молния вообще, вам бы пришлось сделать что-то подобное:
[ [cities[i],airports[i]] for i in xrange(min(len(cities), len(airports))) ]
но нет никаких причин делать это, кроме интеллектуальных упражнений.
Использование map (list, застежка -молния (города, аэропорты))
короче, проще и почти наверняка будет работать быстрее.
Это принимает вывод ZIP
и преобразует все кортежи к списку:
map(list, zip(cities, airports))
как для производительности каждого:
$ python -m timeit -c '[ [a, b] for a, b in zip(xrange(100), xrange(100)) ]'
10000 loops, best of 3: 68.3 usec per loop
$ python -m timeit -c 'map(list, zip(xrange(100), xrange(100)))'
10000 loops, best of 3: 75.4 usec per loop
$ python -m timeit -c '[ list(x) for x in zip(range(100), range(100)) ]'
10000 loops, best of 3: 99.9 usec per loop
Понимание списка без помощи zip
, карты
или itertools
, не может создать «параллельный цикл» для нескольких последовательностей - только простые циклы для одной последовательности или «вложенные» циклы для нескольких последовательностей.