Перевод статьи «Most Frequent Python Problems and Solution» с сайта pamno.com.
Мы проанализировали Stack Overflow на предмет наиболее часто встречающихся проблем и резюмировали ответы.
Совместимо с Python 2.x/3:
Совместимо с Python 2.x/3:
Совместимо с Python 2.7/3.x:
*прим переводчика: функция string.zfill() возвращает строку, дополненную нулями слева, если её длина меньше заданной.
2.7/3.x:
Совместимо с Python 2.6 и выше:
Совместимо с Python 2.7/3:
Совместимо с Python 2.x и 3.x:
Совместимо с Python 2.x:
Совместимо с Python 2.x:
Мы проанализировали 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
Комментарии (10)
stavinsky
29.09.2015 12:56+21. да конечно не используя 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)
А вообще присоединюсь к предыдущему оратору.
captain_obvious
29.09.2015 13:26+6Боги, какой жуткий бинпоиск.
А вообще,import bisect
lukyoung
30.09.2015 06:08не могли бы вы пояснить в чем именно «жуть»?
captain_obvious
05.10.2015 11:59def 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
pavelsh
30.09.2015 08:21А что, умножение матриц в Питоне такое частое?
grossws
30.09.2015 13:25Огромные толпы народа используют python для более-менее интерактивной обработки данных. В частности, в области ML, где умножение матриц — вполне стандартная штука. Другой вопрос, что обычно используется цивильный numpy.
gwer
Судя по списку, наиболее частой проблемой является нежелание знакомиться с языком, с которым приходится работать, вкупе с полнейшим неумением искать информацию.