Используя понимание списка в Python, чтобы сделать что-то подобное для архивирования ()?

Я - новичок 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']]

(Я понимаю, что словари, вероятно, были бы более соответствующими в этой ситуации, но я просто пытаюсь понять списки немного лучше).Спасибо!

10
задан hlovdal 26 December 2010 в 14:49
поделиться

4 ответа

Что-то вроде этого:

[[c, a] for c, a in zip(cities, airports)]

Посноревно, конструктор может преобразовать кортежи к списку:

[list(x) for x in zip(cities, airports)]

или функция функция немного Менее многословие в этом случае:

map(list, zip(cities, airports))
32
ответ дан 3 December 2019 в 13:44
поделиться

Следуя ответу Райана я смог придумать этот простой сценарий, который итерирует через все подмодули и неглубокие их клоны:

#!/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, застежка -молния (города, аэропорты)) короче, проще и почти наверняка будет работать быстрее.

5
ответ дан 3 December 2019 в 13:44
поделиться

Это принимает вывод 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
1
ответ дан 3 December 2019 в 13:44
поделиться

Понимание списка без помощи zip , карты или itertools , не может создать «параллельный цикл» для нескольких последовательностей - только простые циклы для одной последовательности или «вложенные» циклы для нескольких последовательностей.

4
ответ дан 3 December 2019 в 13:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: