[str(wi) for wi in wordids]
является списком .
a = [str(wi) for wi in wordids]
совпадает с
a = []
for wi in wordids:
a.append(str(wi))
Итак
createkey='_'.join(sorted([str(wi) for wi in wordids]))
создает список строк из каждого элемента в wordids
, затем сортирует этот список и объединяет его в большую строку, используя _
в качестве разделителя.
Как правильно заметил agf, вы можететакже используйте выражение генератора, которое выглядит так же, как понимание списка, но с скобками вместо скобок.Это позволяет избежать построения списка, если он вам больше не нужен (за исключением итерации по нему).И если у вас уже есть скобки, как в этом случае с sorted(...)
, вы можете просто снять скобки.
Однако в этом особом случае вы не получите выигрыша в производительности (на самом деле это будет примерно на 10% медленнее; я рассчитал это время), потому что sorted()
в любом случае потребуется создать список,но выглядит немного лучше:
createkey='_'.join(sorted(str(wi) for wi in wordids))
normalizedscores = dict([(u,float(l)/maxscore) for (u,l) in linkscores.items()])
перебирает элементы словаря linkscores
, где каждый элемент является парой ключ / значение.Он создает список ключевых / l/maxscore
кортежей, а затем превращает этот список обратно в словарь.
Однако, начиная с Python 2.7, вы также можете использовать dict comphingings :
normalizedscores = {u:float(l)/maxscore for (u,l) in linkscores.items()}
Вот некоторые временные данные:
Python 3.2.2
>>> import timeit
>>> timeit.timeit(stmt="a = '_'.join(sorted([str(x) for x in n]))", setup="import random; n = [random.randint(0,1000) for i in range(100)]")
61.37724242267409
>>> timeit.timeit(stmt="a = '_'.join(sorted(str(x) for x in n))", setup="import random; n = [random.randint(0,1000) for i in range(100)]")
66.01814811313774
Python 2.7.2
>>> import timeit
>>> timeit.timeit(stmt="a = '_'.join(sorted([str(x) for x in n]))", setup="import random; n = [random.randint(0,1000) for i in range(100)]")
58.01728623923137
>>> timeit.timeit(stmt="a = '_'.join(sorted(str(x) for x in n))", setup="import random; n = [random.randint(0,1000) for i in range(100)]")
60.58927580777687