Пользователь
0,0
рейтинг
29 сентября 2015 в 10:58

Разработка → Наиболее частые проблемы Python и решения (перевод) из песочницы

Перевод статьи «Most Frequent Python Problems and Solution» с сайта pamno.com.

Мы проанализировали Stack Overflow на предмет наиболее часто встречающихся проблем и резюмировали ответы.

1. Как мне проверить, существует ли файл, используя Python, без использования try оператора?


Совместимо с Python 2.x/3:

  import os

  print os.path.isfile(fname)

2. Лучший способ проверить список на пустоту


Совместимо с Python 2.x/3:

  li=[]

  if not li:

     print “empty"


3. Хороший способ дополнить строку нулями


Совместимо с Python 2.7/3.x:

  “12345”.zfill(10)

*прим переводчика: функция string.zfill() возвращает строку, дополненную нулями слева, если её длина меньше заданной.

4. Как можно узнать имеет ли объект атрибут в Python?


2.7/3.x:

hasattr(a,’attributename’)


5. Поймать несколько исключений в одной строке


Совместимо с Python 2.6 и выше:

except (Exception1, Exception2) as e:

     pass

6. Как получить список всех файлов из каталога в Python?


Совместимо с Python 2.7/3:

import os

os.listdir()

7. Как сделать отсортированный список по значениям из Словаря?


Совместимо с Python 2.x и 3.x:

newlist = sorted(list_to_be_sorted, key=lambda k: k['name'])

8. Как разбить список на части одинакового размера?


def chunks(l, n):

""" Yield successive n-sized chunks from l. """

    for i in xrange(0, len(l), n):

        yield l[i:i+n]

9. Как скачать файл по протоколу http?


import urllib2

urllib2.urlopen('http://www.example.com/').read()

10. Умножение матриц в Python


Совместимо с Python 2.x:

def matmult(a,b):

    zip_b = zip(*b)

    return [[sum(ele_a*ele_b for ele_a, ele_b in zip(row_a, col_b)) for col_b in zip_b] for row_a in a]

11. Список всех простых чисел меньше N


Совместимо с Python 2.x:

def primes(n):

   """ Returns  a list of primes < n """

   sieve = [True] * n

   for i in range(3,int(n**0.5)+1,2):

       if sieve[i]:

           sieve[i*i::2*i]=[False]*((n-i*i-1)/(2*i)+1)

           return [2] + [i for i in xrange(3,n,2) if sieve[i]]

12. Алгоритм бинарного поиска в Python


def binary_search(array, target):

   lower = 0
   upper = len(array)

   while lower < upper:   # use < instead of <=

       x = lower + (upper - lower) // 2
       val = array[x]

       if target == val:
           return x
       elif target > val:

           if lower == x:   # this two are the actual lines
               break        # you're looking for
           lower = x

       elif target < val:
           upper = x
@rasswet
карма
5,2
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (10)

  • +37
    Судя по списку, наиболее частой проблемой является нежелание знакомиться с языком, с которым приходится работать, вкупе с полнейшим неумением искать информацию.
  • +2
    1. да конечно не используя try. Не поленился и зашел в IDE:
    # This follows symbolic links, so both islink() and isdir() can be true
    # for the same path on systems that support symlinks
    def isfile(path):
        """Test whether a path is a regular file"""
        try:
            st = os.stat(path)
        except os.error:
            return False
        return stat.S_ISREG(st.st_mode)
    


    А вообще присоединюсь к предыдущему оратору.
  • +6
    Боги, какой жуткий бинпоиск.
    А вообще,
    import bisect
    
    • +2
      + к умножению матриц import numpy
    • 0
      не могли бы вы пояснить в чем именно «жуть»?
      • 0
        def bisect_left(a, x):
            lo, hi = 0, len(a)
            while lo < hi:
                mid = (lo+hi)//2
                if a[mid] < x:
                    lo = mid+1
                else:
                    hi = mid
            return lo
        
  • 0
    А что, умножение матриц в Питоне такое частое?
    • 0
      Ага 3 года каждый день тем и занимаюсь, сижу матрице в CherryPy умножаю)
    • 0
      Огромные толпы народа используют python для более-менее интерактивной обработки данных. В частности, в области ML, где умножение матриц — вполне стандартная штука. Другой вопрос, что обычно используется цивильный numpy.
  • 0
    этот поиск простых чисел начинает работать только с n=9

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