import random
import numba as nb
import numpy as np
def bubble1(array):
len_ = len(array)
for i in range(len_):
for j in range(len_ - i - 1):
if array[j] > array[j + 1]:
temp = array[j]
array[j] = array[j + 1]
array[j + 1] = temp
@nb.njit(parallel=True)
def bubble2(array):
len_ = len(array)
for i in nb.prange(len_):
for j in nb.prange(len_ - i - 1):
if array[j] > array[j+1]:
array[j], array[j + 1] = array[j + 1], array[j]
if __name__ == '__main__':
arr1 = random.choices(range(1000), k=1000)
arr2 = np.array(arr1)
bubble1(arr1)
bubble2(arr2)
"""
%timeit bubble1(arr1)
46.1 ms ± 71.5 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit bubble2(arr2)
82.4 µs ± 678 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
"""
Не получается разместить виджеты в фрейм
f1
- это результат вызова метода pack()
, который НЕ возвращает ссылку на фрэйм, а возвращает None
. Это базовый синтаксис питона, переменной присваивается результат вызова функции.Не могу задать высоту и ширину фрейма
.grid(...)
- больше строк кода, но более гибкий и контролируемый результат. Грид - это сетка, у нее есть параметр минимального размера строки/столбца.import *
- это плохо. import src.mist_loader
. Кроме того каждый новый запуск кода в пайчарме - это по дефолту новый чистый запуск интерпретатора.def __create_problem_description_frame(self):
# здесь создаем сам виджет - self.problem_description_body
# self - это tk.Frame
# непосредственно вся логика
def f1(_event):
# ищем выделенный текст, но никак его не проверяем - одна буква или слово - без разницы
if self.problem_description_body.tag_ranges(tk.SEL):
print('SELECTED Text is %r' % self.problem_description_body.get(tk.SEL_FIRST, tk.SEL_LAST))
else:
print('NO Selected Text')
return
# в тексте ищем точные совпадения
pattern = str(self.problem_description_body.get(tk.SEL_FIRST, tk.SEL_LAST))
start = self.problem_description_body.index("1.0")
end = self.problem_description_body.index("end")
self.problem_description_body.mark_set("matchStart", start)
self.problem_description_body.mark_set("matchEnd", start)
self.problem_description_body.mark_set("searchLimit", end)
# как будем выделять - название тэга и желтый фон
self.problem_description_body.tag_configure("yellow", background="#ffff99")
# погнали искать все совпадения
count = tk.IntVar()
while True:
# непосредственно сам поиск
index = self.problem_description_body.search(
pattern, "matchEnd", "searchLimit", count=count, regexp=True)
if index == "":
break
if count.get() == 0:
break
# и, наконец, выделение найденного фрагмента текста тэгом с именем yellow
self.problem_description_body.mark_set("matchStart", index)
self.problem_description_body.mark_set("matchEnd", "%s+%sc" % (index, count.get()))
self.problem_description_body.tag_add("yellow", "matchStart", "matchEnd")
# биндим срабатывание на отпускание кнопки мыши
self.problem_description_body.bind('<ButtonRelease-1>', f1)
btn = ttk.Button(Button-1, lambda x=1, y=2: func(x, y))
in
? Что-то явно лишнее - либо оператор, либо один из циклов. А то проверяется наличие строки в строке, а не в наборе строк.# хотим отобрать фильмы с такими жанрами - хотя бы одним, но не обязательно всеми сразу
genres_to_look_for = ['Drama', 'Crime']
# вот набор фильмов и их жанров
movies_and_genres = {
1: ['Drama', 'Action', 'Crime', 'Thriller'],
2: ['Drama'],
3: ['Drama'],
4: ['Comedy']}
# для каждого фильма проверяем наличие у него искомых жанров (хотя бы одного)
# если any заменить на all, то будет проверяться одновременное наличие всех искомых жанров
movies_filtered = {
movie: any((genre in genres) for genre in genres_to_look_for)
for movie, genres in movies_and_genres.items()
}
print(movies_filtered)
{1: True, 2: True, 3: True, 4: False}
- прямо то, что надо, согласно моему пониманию задачи - в первых трех есть жанр drama, последний в пролете. А если использовать all
, то получится {1: True, 2: False, 3: False, 4: False}
. convert_float
- в pandas тип одинаков для всех значений в столбце - в столбце есть значение, которое нельзя преобразовать в int. Чаще всего такое бывает, когда в столбце пропущено значение, т.к. пустое значение - это нампаевский NaN типа float.parse_dates
- передается список номеров или названий столбцов, которые необходимо распарсить в дату - отдельные столбцы или группы столбцов, если дата распределена по нескольким.date_parser
- дефолтный парсер нормально работает, хотя и сильно увеличивает время загрузки данных. Имеет смысл парсить даты отдельно после загрузки, если объем большой. lambda c: c.data == food
lambda c, food=food: c.data == food
from typing import List
def f_1(lst: List) -> None:
funcs = list()
for val in lst:
funcs.append(lambda: val)
# цикл закончился, val имеет значение последнего элемента из списка
for func in funcs:
print(func())
def f_2(lst: List) -> None:
funcs = list()
for val in lst:
funcs.append(lambda val=val: val)
for func in funcs:
print(func())
if __name__ == '__main__':
data = ['apple', 'tomato', 'potato']
print("\nf_1:")
f_1(data)
print("\nf_2:")
f_2(data)
Понадобилось сделать аппроксимацию полиномом m-й степени...
Подозреваю ограничение точности double...
В чём может быть проблема?
будет использоваться для Photoshop, CorelDRAW, ...