Ответы пользователя по тегу Python
  • Какие команды нужно знать питонисту (напишете какие наиболее часто вы используете или какая очень запомнилась)?

    @abcd0x00
    Вот эти две ссылки смотри
    Одна по ядру языка
    https://docs.python.org/3/reference/index.html
    Другая по библиотеке языка
    https://docs.python.org/3/library/index.html
    Есть ещё сторонние модули, у них своя документация обычно.
    Ответ написан
    Комментировать
  • Что за идиома в питоне?

    @abcd0x00
    Списочное включение.

    Есть списочное, словарное, множественное включение и есть генераторное выражение.

    Генераторное выражение
    >>> gen = (i for i in 'abcd')
    >>> gen
    <generator object <genexpr> at 0xb7375374>
    >>> next(gen)
    'a'
    >>> next(gen)
    'b'
    >>> next(gen)
    'c'
    >>> next(gen)
    'd'
    >>> next(gen)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration
    >>> next(gen)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration
    >>>


    Вот пример использования генераторного выражения
    >>> list(i for i in 'abc')
    ['a', 'b', 'c']
    >>> list(i, j for i in 'abc')
      File "<stdin>", line 1
    SyntaxError: Generator expression must be parenthesized if not sole argument
    >>>

    Кажется, будто это списочное включение, а на самом деле это генераторное выражение, создающее генератор, который передаётся в конструктор списка.

    Но такую конструкцию часто используют в виде аналога включения опредлённого типа.
    Как бы "кортежное включение"
    >>> tuple(i for i in 'abc')
    ('a', 'b', 'c')
    >>>
    Ответ написан
    Комментировать
  • Почему путается словарь?

    @abcd0x00
    Словарь в питоне - это такое множество, у которого к каждому элементу прицеплено какое-то значение. А называется это "нагруженное множество" - одна из динамических структур данных. А во множестве элементы не упорядочены, зато очень быстрый поиск.
    Ответ написан
    Комментировать
  • Как исправить кодировку в python?

    @abcd0x00
    На вход приходит как кириллица так и латиница.
    Пробовал # -*- coding: utf-8 -*- и # -*- coding: cp1251 -*-

    Эта декларация кодировки вообще никак не относится к тому, что приходит. Эта декларация сообщает интерпретатору, в какой кодировке записан сам исходник (чтобы интерпретатор неправильно не раскодировал его).
    Ответ написан
    Комментировать
  • Как сделать перебор элементов многомерного списка?

    @abcd0x00
    >>> def f(lst, func):
    ...     for i in range(len(lst)):
    ...         if isinstance(lst[i], list):
    ...             f(lst[i], func)
    ...         else:
    ...             lst[i] = func(lst[i])
    ...     return lst
    ... 
    >>> lst = [1, [2, 3], [4, [5, 6]]]
    >>> 
    >>> lst = f(lst, lambda x: 2 * x + 1)
    >>> lst
    [3, [5, 7], [9, [11, 13]]]
    >>>
    Ответ написан
    Комментировать
  • Красивый вывод в python?

    @abcd0x00
    >>> import pprint
    >>> 
    >>> lst = [1, 2, 3, 4, 5, {'a': 'b', 'c': 'd', 'e': 'f'}]
    >>> 
    >>> pprint.pprint(lst, width=5)
    [1,
     2,
     3,
     4,
     5,
     {'a': 'b',
      'c': 'd',
      'e': 'f'}]
    >>>
    Ответ написан
    Комментировать
  • Как взять буквенный срез?

    @abcd0x00
    >>> class Human:
    ...     
    ...     def __init__(self, age, name):
    ...         self.age = age
    ...         self.name = name
    ... 
    >>> lst = [Human(20, 'aaa'),
    ...        Human(25, 'fff'),
    ...        Human(30, 'ggg'),
    ...        Human(35, 'jjj'),
    ...        Human(40, 'zzz')]
    >>> 
    >>> out = [i for i in lst if 'f' <= i.name[0] <= 'l']
    >>> out
    [<__main__.Human object at 0xb740d50c>, <__main__.Human object at 0xb740d58c>, <__main__.Human object at 0xb740d5ac>]
    >>> 
    >>> [i.name for i in out]
    ['fff', 'ggg', 'jjj']
    >>> 
    >>> out = filter(lambda i: 'f' <= i.name[0] <= 'l', lst)
    >>> out
    <filter object at 0xb740d68c>
    >>> 
    >>> [i.name for i in out]
    ['fff', 'ggg', 'jjj']
    >>>
    Ответ написан
    Комментировать
  • Почему не работает main?

    @abcd0x00
    Имя main в питоне не зарезервировано, просто функцию main() часто используют по аналогии с сишными программами (по этой функции видно, что делает программа и откуда всё начинается).

    А ворота
    if __name__ == '__main__':
    нужны для того, чтобы исключить определённый код из импорта.
    Каждый файл .py в питоне является модулем, его можно импортировать, как обычный модуль, и использовать содержимое из него (функции, классы и другие объекты). Но при этом и сам по себе файл что-то делает, если его запускают сам по себе. При импорте весь модуль сначала выполняется, но если тебе нужна только функция из модуля и тебе не нужно выполнять то, для чего весь этот модуль сделан, он всё равно будет выполняться весь. Поэтому в модуле ставятся ворота, которые пропускают только тогда, когда модуль запускается в виде самостоятельного файла. Когда же его импортируют, ворота не пропускают.

    Зря ты начал изучение с Django, потому что там никто тебе не будет объяснять эти основы, а это реально самые основы питона.
    Ответ написан
    Комментировать
  • Python как сделать табличку?

    @abcd0x00
    >>> def f(n):
    ...     for i in range(n):
    ...         for j in range(n):
    ...             if i == j or n - 1 - i == j:
    ...                 print(' 1', end='')
    ...             else:
    ...                 print(' 0', end='')
    ...             if j == n - 1:
    ...                 print()
    ... 
    >>> f(5)
     1 0 0 0 1
     0 1 0 1 0
     0 0 1 0 0
     0 1 0 1 0
     1 0 0 0 1
    >>> f(11)
     1 0 0 0 0 0 0 0 0 0 1
     0 1 0 0 0 0 0 0 0 1 0
     0 0 1 0 0 0 0 0 1 0 0
     0 0 0 1 0 0 0 1 0 0 0
     0 0 0 0 1 0 1 0 0 0 0
     0 0 0 0 0 1 0 0 0 0 0
     0 0 0 0 1 0 1 0 0 0 0
     0 0 0 1 0 0 0 1 0 0 0
     0 0 1 0 0 0 0 0 1 0 0
     0 1 0 0 0 0 0 0 0 1 0
     1 0 0 0 0 0 0 0 0 0 1
    >>>
    Ответ написан
    Комментировать
  • Как узнать какая инструкция сработала при конструкции if 'слово1' in string or 'слово2' in string?

    @abcd0x00
    >>> def f(s):
    ...     words = ('слово1', 'слово2', 'слово3')
    ...     for w in words:
    ...         if w in s:
    ...             return w
    ... 
    >>> f('abc слово2 def слово1 ghi')
    'слово1'
    >>> f('abc def ghi')
    >>>
    Ответ написан
    Комментировать
  • Работа со списком, как имея строку преобразовать в список а потом обратно?

    @abcd0x00
    >>> import re
    >>> 
    >>> s = '( 10 + 20 ) * 3 + 5'
    >>> 
    >>> re.findall(r'\d+|[+\-*/()]', s)
    ['(', '10', '+', '20', ')', '*', '3', '+', '5']
    >>>
    Ответ написан
    Комментировать
  • Как записать список с целыми числами в файл с помощью writelines() (Python)?

    @abcd0x00
    >>> lst = [1, 2, 3, 4, 5, 6]
    >>> 
    >>> with open('file.txt', 'w', encoding='utf-8') as fout:
    ...     print('\n'.join(map(str, lst)), file=fout)
    ... 
    >>>
    Ответ написан
    Комментировать
  • Как вывести элементы списков, вложенных в список?

    @abcd0x00
    >>> ' '.join(sum([['foo'], ['bar']], []))
    'foo bar'
    >>>
    Ответ написан
    Комментировать
  • Как сократить код?

    @abcd0x00
    >>> d = {'aaa': 1, 'bbb': 2}
    >>> 
    >>> if set(d) & {'aaa', 'ccc'}:
    ...     print('yes')
    ... else:
    ...     print('no')
    ... 
    yes
    >>> 
    >>> if set(d) & {'ddd', 'ccc'}:
    ...     print('yes')
    ... else:
    ...     print('no')
    ... 
    no
    >>>
    Ответ написан
    Комментировать
  • Первый проект чтобы научиться?

    @abcd0x00
    На мой субъективный взгляд это не выглядит слишком сложным.

    Вот в этом твоя ошибка. Как показывает опыт, в таких задачах всегда есть неожиданные ситуации, которые возникают при разработке. И всё зависит от того, насколько ты способен решать такие неожиданности (подводные камни). А для этого нужен практический опыт.
    Пример

    Просто представь ситуацию: ты идёшь продавцом куда-нибудь и думаешь подзаработать, но у тебя нет опыта. Ты думаешь "ну и что, что там сложного, продавать - дал товар, взял деньги и всё". Вот ты стоишь за прилавком, открывается дверь и забегает собака. Прыг-скок такая смешная, прыг-скок и прыг и лапой задевает банку какую-то и та разбивается. Ты к собаке (найти владельца) - она на улицу, убежала. И вот ты заходишь и читаешь на банке этой "огурцы мадагаскарские, тушёные в соусе чаппа, цена - 5000 рублей за штучку". И ты стоишь и думаешь "какой же я дурак был, что банку не убрал в недоступное место, мало ли кто её может так разбить".

    Вот это - отсутствие опыта и заодно его приобретение.
    Ответ написан
    2 комментария
  • Как правильно распарсить xml?

    @abcd0x00
    >>> import xml.etree.ElementTree as etree
    >>> import csv
    >>> import sys
    >>> 
    >>> text = """\
    ... <Root>
    ...   <SubRoot>
    ...     <Level1>A</Level1>
    ...     <Level2>B</Level2>
    ...     <Level3>C</Level3>
    ...     <Level4>D</Level4>
    ...   </SubRoot>
    ... 
    ...   <SubRoot>
    ...     <Level1>1</Level1>
    ...     <Level2>2</Level2>
    ...     <Level3>3</Level3>
    ...   </SubRoot>
    ... </Root>
    ... """
    >>> 
    >>> root = etree.fromstring(text)
    >>> 
    >>> out = [[i.text for i in node] for node in root]
    >>> out
    [['A', 'B', 'C', 'D'], ['1', '2', '3']]
    >>> 
    >>> out = [(i + [None] * (4 - len(i))) for i in out]
    >>> out
    [['A', 'B', 'C', 'D'], ['1', '2', '3', None]]
    >>> 
    >>> writer = csv.writer(sys.stdout)
    >>> writer.writerows(out)
    A,B,C,D
    1,2,3,
    >>>
    Ответ написан
    Комментировать
  • Глупый вопрос по Python?

    @abcd0x00
    >>> text = "eujiyghkiuyhjiu"
    >>> 
    >>> dic = {}
    >>> 
    >>> for c in text:
    ...     dic[c] = dic.get(c, 0) + 1
    ... 
    >>> dic
    {'e': 1, 'g': 1, 'u': 3, 'k': 1, 'h': 2, 'y': 2, 'j': 2, 'i': 3}
    >>>
    Ответ написан
    Комментировать
  • Как в текстовый файл записать имя этого же файла?

    @abcd0x00
    Ты бы скобки заменил на почёркивание 40104161(1) -> 40104161_1.
    А потом переписал первую строку файла, скопировав в неё его имя.

    Для этого нужно два скрипта (на питоне, шелле или чём): первый скрипт вот этот скобочный суффикс переданного ему файла заменяет на подчёркнутый суффикс; второй скрипт просто берёт файл и пишет в его первую строку его имя.

    А над ними третий скрипт, который запускает для файла сначала первый скрипт, а потом второй.

    И вот когда у тебя есть этот третий скрипт, ты его запускаешь в цикле для списка файлов.
    Ответ написан
    Комментировать
  • Python без Django etc, что остается в итоге?

    @abcd0x00
    Ответ написан
    Комментировать
  • Как вызывать функцию, которая находится в теле другой функции?

    @abcd0x00
    Сделать можно, но делать так не надо
    >>> def foo():
    ...     print('in foo')
    ...     def foo_in_foo():
    ...         print('in foo_in_foo')
    ...     foo.foo_in_foo = foo_in_foo
    ... 
    >>> foo()
    in foo
    >>> foo.foo_in_foo()
    in foo_in_foo
    >>>
    Ответ написан
    Комментировать