Pull to refresh

Comments 27

UFO just landed and posted this here
Или когда нужно множество уникальных элементов. Если такое есть, то нужно завести сет под это.

«Не рассказывает»? А документация им это тоже не рассказывает?

Определённо, это статья для тех, кто хочет всё знать, но не хочет ничего читать, смотреть или слушать. Тут, однако, парадокс: статью же ещё прочитать надо

Но статью тоже прочитать надо… Только это какие-то обрывочные знания выходят.
Что такое «документация»? Гугол, стекоферфлоу и сразу писать код!
Вы бы ещё книгу (большая толстая газета) посоветовали бы!
Для Python'а документация не такая уж и толстая (или как сейчас более корректно это называть?), да и достаточно занимательная. Я в своё время освоил Python только прочитав документацию (в то время это был 1.6.1).
Если статья оказалась интересной, то документация будет как увлекательное детективное чтиво.

7-я хитрость на Python: представление больших чисел в удобочитаемом виде

a=663_456_987 
print(type(a)) 
<class 'int'>
print(a) 
663456987

Возможно, ниже еще десяток "хитростей в python" подвезут.

А так же в Перле, JS и ПХП:

php > $a = 663_456_987;

php > print(gettype($a));

integer

php > print($a);

663456987

Блин, как это работает то?

>>> a = str(654_987_123)
>>> type(a)
<class 'str'>
>>> print(a)
654987123
С оператором * можно делать unzip:
a = [1, 2, 3]
b = [4, 5, 6]
ab = zip(a, b)     # [(1, 4), (2, 5), (3, 6)]
a1, b1 = zip(*ab)  # (1, 2, 3), (4, 5, 6)
a2, b2 = zip(*ab)  # в Python 2 работало, в Python 3 ошибка

(тут еще следует помнить, что в третьем Питоне zip выдает не список, а генератор, и после произведенной над ним операции zip(*ab) он будет пустым, т. е., например, повторить операцию над тем же объектом не получится)
Никто не рассказывает, кроме любого учебника.
Кликбейт заголовок на хабре?
даладно.жпг
Назначение результатов работы оператора распаковки переменным

Возможно, после того, как вы узнали о возможностях оператора распаковки, вы захотите пользоваться им для записи данных в переменные. Посмотрим на то, как это сделать:

string = «Let's learn Python»

# Мы собираемся сохранить результат распаковки строки в var1
var1 = [*string]

print(var1)
# ['L', 'e', 't', "'", 's', ' ', 'l', 'e', 'a', 'r', 'n', ' ', 'P', 'y', 't', 'h', 'o', 'n']

Возможно, вам покажется непонятной конструкция [*iterable]. Поэтому давайте с ней разберёмся.


Рубрика «Вредные советы». Если вдруг Вам по какой-либо причине захочется воспользоваться оператором * для создания итерируемого объекта другого типа на основе существующего, то нужно просто воспользоваться конструктором нужного типа:

var1 = list(string)


Вместо какой-то нечитаемой конструкции, проблему которой сам же автор признает:
«Возможно, вам покажется непонятной конструкция [*iterable].»

Конечно же не понятно, что сделать-то хотели? Конвертировать строку в список? Ну так и пишите! Вместо list может быть tuple, deque, set или другие коллекции, поддерживающие инициализацию из итерируемого объекта.
… завоёвывает сердца… простотой синтаксиса.

Вот сейчас смешно было.
Функцией breakpoint() можно пользоваться в Python 3.6+. Она инициирует запуск сессии pdb.set_trace().

Вот за это спасибо. Для использования ipdb нужно прописать

export PYTHONBREAKPOINT=ipdb.set_trace
var3 = (*another_str,)

Это плохочитаемый код, лучше явно:

var3 = tuple(another_str)

Set, под капотом, использует хеш-таблицы, т. е.

x = {1, 2, 3}
3 in x

будет выполняться за O(1), в отличие от

x = [1, 2, 3]
3 in x

которое будет выполняться за O(n)

Вот функция, которая удаляет из списка дубликаты элементов и возвращает отсортированный список:

sorted(set(lst))


А не тот императивный код с созданием списка в отдельную переменную.

Функция dir() возвращает список атрибутов и методов класса.

А функция help() возвращает документацию по атрибутам и методам. Удивительное рядом!

Кто же еще расскажет зумерам про интроспекцию? Никто, кроме нас! :)

Документацию то они не читают.

ценность подобных статей в том, что они порой порождают в комментариях более ценные дискуссии и советы ;)

КГ/АМ
В книгах по Питону это всё написано, если их, конечно, читать, что и должны делать новички. Кроме места про отладчик, которое нафиг не нужно.
Хитрость для тех, кто не хочет прочитать Лутца первый том

Если попытаться передать функции random.choice(seq) неиндексируемую последовательность, например — словарь, множество или значение числового типа — возникнет ошибка.

Ошибкой было назвать словарь неиндексируемой последовательностью. Да возникнет она не у только лишь всех )

from random import choice

d = {i: i * i for i in range(10)}
print(choice(d)) #  всё пучком

Внтури квадратных скобок можно использовать многоточие, оно станет объектом Ellipsis. Можно использовать для конструкций вида:

LazyList[1, ...]

В п.5. очень странный пример. Во-первых,
if not len(seq) > index

Гораздо лаконичнее написать
if len(seq) < index

не? Да и в целом не будет ошибки, если конечный индекс превысит длину строки. Например:

>>> "aaa"[:100]
'aaa'
Sign up to leave a comment.