Базовые математические операторы
Содержание:
- Игра в кости с использованием модуля random в Python
- Операторы присваивания Python
- Использование itertools.tee() для клонирования последовательностей
- Степени, логарифмирование, экспоненцирование
- Возведение в степень (**)
- Функция экспоненты exp() в Python
- Целое число
- Создать комбинации с помощью combinations()
- Арифметические функции в Python
- Веб-разработка
- Использование Python itertools.chain() для объединения итераций
- Манипуляции с изображениями и видео
- Для генерации последовательности на основе счетчика
- Арифметические операции
- 3 Логарифмические функции
- Гиперболические функции
- Функции для последовательностей
- Как отфильтровать элементы с помощью takewhile() и drop while()
Игра в кости с использованием модуля random в Python
Далее представлен код простой игры в кости, которая поможет понять принцип работы функций модуля random. В игре два участника и два кубика.
- Участники по очереди бросают кубики, предварительно встряхнув их;
- Алгоритм высчитывает сумму значений кубиков каждого участника и добавляет полученный результат на доску с результатами;
- Участник, у которого в результате большее количество очков, выигрывает.
Код программы для игры в кости Python:
Python
import random
PlayerOne = «Анна»
PlayerTwo = «Алекс»
AnnaScore = 0
AlexScore = 0
# У каждого кубика шесть возможных значений
diceOne =
diceTwo =
def playDiceGame():
«»»Оба участника, Анна и Алекс, бросают кубик, используя метод shuffle»»»
for i in range(5):
#оба кубика встряхиваются 5 раз
random.shuffle(diceOne)
random.shuffle(diceTwo)
firstNumber = random.choice(diceOne) # использование метода choice для выбора случайного значения
SecondNumber = random.choice(diceTwo)
return firstNumber + SecondNumber
print(«Игра в кости использует модуль random\n»)
#Давайте сыграем в кости три раза
for i in range(3):
# определим, кто будет бросать кости первым
AlexTossNumber = random.randint(1, 100) # генерация случайного числа от 1 до 100, включая 100
AnnaTossNumber = random.randrange(1, 101, 1) # генерация случайного числа от 1 до 100, не включая 101
if( AlexTossNumber > AnnaTossNumber):
print(«Алекс выиграл жеребьевку.»)
AlexScore = playDiceGame()
AnnaScore = playDiceGame()
else:
print(«Анна выиграла жеребьевку.»)
AnnaScore = playDiceGame()
AlexScore = playDiceGame()
if(AlexScore > AnnaScore):
print («Алекс выиграл игру в кости. Финальный счет Алекса:», AlexScore, «Финальный счет Анны:», AnnaScore, «\n»)
else:
print(«Анна выиграла игру в кости. Финальный счет Анны:», AnnaScore, «Финальный счет Алекса:», AlexScore, «\n»)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
importrandom PlayerOne=»Анна» PlayerTwo=»Алекс» AnnaScore= AlexScore= diceOne=1,2,3,4,5,6 diceTwo=1,2,3,4,5,6 defplayDiceGame() «»»Оба участника, Анна и Алекс, бросают кубик, используя метод shuffle»»» foriinrange(5) #оба кубика встряхиваются 5 раз random.shuffle(diceOne) random.shuffle(diceTwo) firstNumber=random.choice(diceOne)# использование метода choice для выбора случайного значения SecondNumber=random.choice(diceTwo) returnfirstNumber+SecondNumber print(«Игра в кости использует модуль random\n») foriinrange(3) # определим, кто будет бросать кости первым AlexTossNumber=random.randint(1,100)# генерация случайного числа от 1 до 100, включая 100 AnnaTossNumber=random.randrange(1,101,1)# генерация случайного числа от 1 до 100, не включая 101 if(AlexTossNumber>AnnaTossNumber) print(«Алекс выиграл жеребьевку.») AlexScore=playDiceGame() AnnaScore=playDiceGame() else print(«Анна выиграла жеребьевку.») AnnaScore=playDiceGame() AlexScore=playDiceGame() if(AlexScore>AnnaScore) print(«Алекс выиграл игру в кости. Финальный счет Алекса:»,AlexScore,»Финальный счет Анны:»,AnnaScore,»\n») else print(«Анна выиграла игру в кости. Финальный счет Анны:»,AnnaScore,»Финальный счет Алекса:»,AlexScore,»\n») |
Вывод:
Shell
Игра в кости использует модуль random
Анна выиграла жеребьевку.
Анна выиграла игру в кости. Финальный счет Анны: 5 Финальный счет Алекса: 2
Анна выиграла жеребьевку.
Анна выиграла игру в кости. Финальный счет Анны: 10 Финальный счет Алекса: 2
Алекс выиграл жеребьевку.
Анна выиграла игру в кости. Финальный счет Анны: 10 Финальный счет Алекса: 8
1 2 3 4 5 6 7 8 9 10 |
Игравкостииспользуетмодульrandom Аннавыигралаигрувкости.ФинальныйсчетАнны5ФинальныйсчетАлекса2 Аннавыигралаигрувкости.ФинальныйсчетАнны10ФинальныйсчетАлекса2 Аннавыигралаигрувкости.ФинальныйсчетАнны10ФинальныйсчетАлекса8 |
Вот и все. Оставить комментарии можете в секции ниже.
Операторы присваивания Python
Оператор «=» присваивает значение, расположенное справа, переменной слева. Например, v = 23 присваивает значение числа 23 переменной v.
В программировании часто используют составные операторы присваивания. Они соединяют арифметический оператор с оператором «=». Поэтому для сложения мы используем оператор «+» с оператором «=», чтобы получить составной оператор «+=». Пример:
w = 5 w += 1 print(w)
Вывод
6
Сначала мы задаём переменной значение . Затем используем составной оператор присваивания , чтобы прибавить число справа, к переменной, расположенной слева, и присвоить результат переменной .
Составные операторы присваивания часто используются в циклах for:
for x in range (0, 7): x *= 2 print(x)
Вывод
0 2 4 6 8 10 12
При помощи for можно автоматизировать процесс использования оператора «. Он умножает переменную на число , а затем присваивает полученный результат переменной для следующей итерации цикла.
В Python предусмотрен составной оператор присваивания для каждой арифметической операции:
y += 1 # добавить число и присвоить результат y -= 1 # отнять число и присвоить результат y *= 2 # умножить на число и присвоить результат y /= 3 # разделить на число и присвоить результат y // = 5 # разделить без остатка на число и присвоить результат y **= 2 # возвести в степень и присвоить результат y %= 3 # вернуть остаток от деления и присвоить результат
Составные операторы присваивания полезны в тех случаях, когда переменная должна увеличиваться или уменьшаться с помощью инкремента. А также когда необходимо автоматизировать некоторый процесс в создаваемой программе.
Использование itertools.tee() для клонирования последовательностей
Есть еще одна полезная функция под названием , которая клонирует последовательность и производит две последовательности.
cloned1, cloned2 = itertools.tee(original_sequence)
Это основано на команде Linux tee, которая клонирует свои выходные данные.
Здесь, когда вы клонируете последовательность с помощью , вы не можете снова использовать тот же итератор. Вы должны быть очень осторожны при использовании этой функции.
import itertools single_iterator = itertools.islice(itertools.count(), 3) cloned1, cloned2 = itertools.tee(single_iterator) for num in cloned1: print('cloned1: {}'.format(num)) for num in cloned2: print('cloned2: {}'.format(num))
Выход
cloned1: 0 cloned1: 1 cloned1: 2 cloned2: 0 cloned2: 1 cloned2: 2
Действительно, мы могли видеть две клонированные последовательности с одинаковыми выходами.
Степени, логарифмирование, экспоненцирование
- math.pow(x, y)
- Возвращает x в степени y.
В ситуациях или данная функция всегда возвращает \(1\) даже если x равен NaN, Inf или -Inf. Однако, если x и y являются конечными числами, причем x отрицательное, а y не целое, то будет вызвано исключение ValueError:
- math.sqrt(x)
- Возвращает квадратный корень числа x.
- math.log(x)
- Если указано только число x, то возвращается натуральный логарифм данного числа. Если указано число x и основание base, то возвращается логарифм числа по указанному основанию.
По сути, команда равносильна команде :
- math.log10(x)
- Возвращает десятичный логарифм числа x, вычисление которого происходит немного точнее, чем .
- math.log2(x)
- Возвращает двоичный логарифм числа x, вычисление которого происходит немного точнее, чем .
- math.log1p(x)
- Возвращает натуральный логарифм от x увеличенного на \(1\) (), значение которого расчитывается более точно, особенно для небольших чисел x.
- math.exp(x)
- Возвращает .
- math.expm1(x)
- Возвращает , которое вычисляется значительно точнее, чем , особенно для небольших чисел x.
Возведение в степень (**)
Нетипичный оператор для большинства других языков программирования. Тем он и удобен. Парная «звёздочка» (**) выполняет классическое математическое возведение числа «a» в степень «b»:
И показатель степени, и основание могут быть отрицательными:
И дробными:
Операндов у возведения в степень также может быть несколько. В таком случае, оператор «**» работает, как право-ассоциативный (т.е. операции выполняются справа-налево):
В завершении — про приоритет операций. Если в выражении используются разные операторы, то порядок их выполнения будет следующим:
- возведение в степень;
- умножение, деление, целочисленное деление и деление по модулю;
- сложение и вычитание.
Функция экспоненты exp() в Python
Библиотека Math в Python поставляется с функцией , которую можно использовать для вычисления значения . К примеру, — экспонента от . Значение равно .
Метод может быть использован со следующим синтаксисом:
Python
math.exp(x)
1 | math.exp(x) |
Параметр может быть положительным или отрицательным числом. Если не число, метод возвращает ошибку. Рассмотрим пример использования данного метода:
Python
import math
# Инициализация значений
an_int = 6
a_neg_int = -8
a_float = 2.00
# Передача значений методу exp() и вывод
print(math.exp(an_int))
print(math.exp(a_neg_int))
print(math.exp(a_float))
1 2 3 4 5 6 7 8 9 10 11 |
importmath an_int=6 a_neg_int=-8 a_float=2.00 print(math.exp(an_int)) print(math.exp(a_neg_int)) print(math.exp(a_float)) |
Вывод
Shell
403.4287934927351
0.00033546262790251185
7.38905609893065
1 2 3 |
403.4287934927351 0.00033546262790251185 7.38905609893065 |
Мы объявили три переменные и присвоили им значения с различными числовыми типами данных. Мы передали значения методу для вычисления их экспоненты.
Мы также можем применить данный метод для встроенных констант, что продемонстрировано ниже:
Python
import math
print(math.exp(math.e))
print(math.exp(math.pi))
1 2 3 4 |
importmath print(math.exp(math.e)) print(math.exp(math.pi)) |
Вывод
Shell
15.154262241479262
23.140692632779267
1 2 |
15.154262241479262 23.140692632779267 |
При передаче не числового значения методу будет сгенерирована , как показано далее:
Python
import math
print(math.exp(«20»))
1 2 3 |
importmath print(math.exp(«20»)) |
Вывод
Shell
Traceback (most recent call last):
File «C:/Users/admin/mathe.py», line 3, in <module>
print (math.exp(«20»))
TypeError: a float is required
1 2 3 4 |
Traceback(most recent call last) File»C:/Users/admin/mathe.py»,line3,in<module> print(math.exp(«20»)) TypeErrorafloatisrequired |
Как видно из примера выше, генерируется ошибка .
Целое число
Целые числа — это целые числа. Они могут быть положительными или отрицательными. Они должны быть без десятичных значений.
Мы можем использовать функцию int(), чтобы получить целочисленное представление объекта. В объекте должен быть реализован метод __int __(), который возвращает целое число.
Давайте рассмотрим несколько примеров.
x = 10 print(type(x)) x = int("10") print(type(x)) class Data: id = 0 def __init__(self, i): self.id = i def __int__(self): return self.id d = Data(10) x = int(d) print(x) print(type(x))
Вывод:
<class 'int'> <class 'int'> 10 <class 'int'>
Класс String предоставляет метод __int __(), поэтому мы можем легко преобразовать строку в int с помощью метода int().
Если объект не реализует метод __int __(), функция int() выдает ошибку TypeError.
Обычно целые числа определяются на основе 10. Но мы также можем определять их в двоичном, восьмеричном и шестнадцатеричном формате.
i = 0b1010 print(i) # 10 i = 0xFF print(i) # 255 i = 0o153 print(i) # 107
Создать комбинации с помощью combinations()
Мы также можем создавать последовательности комбинаций, используя Python .
iterator = itertools.combinations(*sequence, r)
Вот простой пример:
import itertools words = results = itertools.combinations(words, 2) for item in results: print(item)
Выход
('hello', 'from') ('hello', 'AskPython') ('hello', 'how') ('from', 'AskPython') ('from', 'how') ('AskPython', 'how')
Если вы хотите, чтобы в комбинациях повторялись последовательные элементы, вы можете использовать .
results = itertools.combinations_with_replacement(words, 3) for item in results: print(item)
Выход
('hello', 'hello', 'hello') ('hello', 'hello', 'from') ('hello', 'hello', 'AskPython') ('hello', 'hello', 'how') ('hello', 'from', 'from') ('hello', 'from', 'AskPython') ('hello', 'from', 'how') ('hello', 'AskPython', 'AskPython') ('hello', 'AskPython', 'how') ('hello', 'how', 'how') ('from', 'from', 'from') ('from', 'from', 'AskPython') ('from', 'from', 'how') ('from', 'AskPython', 'AskPython') ('from', 'AskPython', 'how') ('from', 'how', 'how') ('AskPython', 'AskPython', 'AskPython') ('AskPython', 'AskPython', 'how') ('AskPython', 'how', 'how') ('how', 'how', 'how')
Точно так же вы можете перечислить перестановки, используя и .
Арифметические функции в Python
Арифметические функции используются для представления чисел в различных формах и осуществления над ними математических операций. Далее представлен перечень самых популярных арифметических функций:
- : округление определенного числа вверх;
- : возвращает модуль (абсолютное значение) указанного числа;
- : округление определенного числа вниз;
- : получение наибольшего общего делителя чисел и ;
- : возвращает сумму всех элементов итерируемого объекта;
- : возвращает (e^x)-1;
- : когда значение слишком мало, вычисление может привести к значительной потери в точности. может вернуть вывод с полной точностью.
В следующем примере показано использование перечисленных выше функций:
Python
import math
num = -4.28
a = 14
b = 8
num_list =
x = 1e-4 # Малое значение x
print(‘Число:’, num)
print(‘Округление числа вниз:’, math.floor(num))
print(‘Округление числа вверх:’, math.ceil(num))
print(‘Модуль числа:’, math.fabs(num))
print(‘Наибольший общий делитель a и b: ‘ + str(math.gcd(a, b)))
print(‘Сумма элементов списка: ‘ + str(math.fsum(num_list)))
print(‘e^x (при использовании функции exp()) равно:’, math.exp(x)-1)
print(‘e^x (при использовании функции expml()) равно:’, math.expm1(x))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
importmath num=-4.28 a=14 b=8 num_list=10,8.25,75,7.04,-86.23,-6.43,8.4 x=1e-4# Малое значение x print(‘Число:’,num) print(‘Округление числа вниз:’,math.floor(num)) print(‘Округление числа вверх:’,math.ceil(num)) print(‘Модуль числа:’,math.fabs(num)) print(‘Наибольший общий делитель a и b: ‘+str(math.gcd(a,b))) print(‘Сумма элементов списка: ‘+str(math.fsum(num_list))) print(‘e^x (при использовании функции exp()) равно:’,math.exp(x)-1) print(‘e^x (при использовании функции expml()) равно:’,math.expm1(x)) |
Вывод
Python
Число: -4.28
Округление числа вниз: -5
Округление числа вверх: -4
Модуль числа: 4.28
Наибольший общий делитель a и b: 2
Сумма элементов списка: 16.029999999999998
e^x (при использовании функции exp()) равно: 0.0001000050001667141
e^x (при использовании функции expml()) равно: 0.00010000500016667084
1 2 3 4 5 6 7 8 |
Число-4.28 Округлениечиславниз-5 Округлениечиславверх-4 Модульчисла4.28 Наибольшийобщийделительaиb2 Суммаэлементовсписка16.029999999999998 e^x(прииспользованиифункцииexp())равно0.0001000050001667141 e^x(прииспользованиифункцииexpml())равно0.00010000500016667084 |
К числу других математических функций относятся:
- : принимает два вещественных аргумента, возводит первый аргумент в степень, значением которой является второй аргумент, после чего возвращает результат. К примеру, эквивалентно выражению ;
- : возвращает квадратный корень определенного числа.
Примеры данных методов представлены ниже:
Возведение в степень
Python
math.pow(3, 4)
1 | math.pow(3,4) |
Вывод
Shell
81.0
1 | 81.0 |
Квадратный корень
Python
math.sqrt(81)
1 | math.sqrt(81) |
Вывод
Shell
9.0
1 | 9.0 |
Веб-разработка
Python это популярный язык для веб-разработки.
Все пакеты Python, перечисленные в этом
разделе, делают жизнь веб-разработчика
гораздо проще.
Beautiful Soup. Библиотека Python для быстрого парсинга HTML- и XML-файлов.
scrape. Модуль Python для веб-браузинга и скрапинга.
mechanize. Очень полезный модуль, благодаря которому вы получаете эмулятор браузера для взаимодействия с веб-страницами.
libgmail. Обеспечивает доступ к гугловскому сервису Gmail.
Google Maps. Благодаря этому модулю можно использовать веб-сервисы платформы Google Maps в своем приложении на Python.
Requests позволяет невероятно легко отсылать HTTP/1.1-запросы.
Selenium. При помощи этого модуля разработчики могут программными методами открывать веб-страницы, заполнять поля, кликать по кнопкам и отсылать формы.
pyquery позволяет делать jQuery-запросы в XML-документах. API этой библиотеки максимально приближен к jQuery. Для быстрой манипуляции с XML и HTML pyquery использует LXML.
Использование Python itertools.chain() для объединения итераций
Метод Python генерирует итератор из нескольких итераций.
Это просто связывает все итераторы вместе в одну последовательность и возвращает единственный итератор для этой объединенной последовательности.
Синтаксис этого метода следующий
iterator = itertools.chain(*sequence)
Давайте посмотрим на простой пример.
import itertools list1 = list2 = dict1 = {'site': 'AskPython', 'url': 'https://askpython.com'} # We can combine lists and dicts (iterables) into a single chain for item in itertools.chain(list1, list2, dict1): print(item)
Здесь мы используем итератор напрямую, перебирая его, используя
Выход
hello from AskPython 10 20 30 40 50 site url
Хотя мы получаем содержимое наших списков правильно, значения словаря не отображаются.
Чтобы исправить это, мы могли бы использовать для получения кортежа пар .
import itertools list1 = list2 = dict1 = {'site': 'AskPython', 'url': 'https://askpython.com'} # We can combine lists and dicts (iterables) into a single chain for item in itertools.chain(list1, list2, dict1.items()): print(item)
Выход
hello from AskPython 10 20 30 40 50 ('site', 'AskPython') ('url', 'https://askpython.com')
Теперь у нас также есть напечатанные значения.
Манипуляции с изображениями и видео
Python это очень мощный язык; с его помощью
можно решать многие задачи, например,
работать с изображениями. Стандартная
библиотека не имеет встроенного
функционала для этих целей, но следующие
модули вам помогут.
Python Imaging Library (PIL). PIL добавляет в интерпретатор Python возможность обработки изображений. Эта библиотека поддерживает много форматов файлов и предоставляет хороший функционал для работы с графикой.
Gdmodule. Это интерфейс для библиотеки GD, созданной Томасом Баутелом.
VideoCapture. Win32-расширение для доступа к таким видеоустройствам, как веб-камеры (USB) и ТВ-карты.
MoviePy. Библиотека Python для редактирования видео: обрезка, склейка, вставка надписей, нелинейное редактирование, обработка видео и создание пользовательских эффектов.
pyscreenshot. Кроссплатформенный модуль, позволяющий делать скриншоты без установки сторонних библиотек.
Для генерации последовательности на основе счетчика
Мы можем использовать функцию Python чтобы сделать итераторы соответствующими .
iterator = itertools.count(start=0, step=1)
Здесь это итератор, который ведет счет бесконечно, начиная с 0 и далее. Продолжает увеличивать счет на . Мы также можем установить десятичное или отрицательное число.
Например, если вы хотите доказать, что у вас бесконечный цикл, вы можете запустить приведенный ниже фрагмент, но это НЕ рекомендуется.
Просто убедитесь, что считается бесконечно.
for num in itertools.count(start=0, step=1): # Infinite loop! print(num)
Использование этой функции может не сразу показаться вам очевидным, вы можете комбинировать ее с другими функциями, такими как метод zip, для создания последовательностей.
Рассмотрим пример ниже:
import itertools numbers = data = list(zip(itertools.count(0, 10), numbers)) print(data)
Здесь вы можете увидеть мощь итераторов. Поскольку итераторы производят выходные данные только по запросу, мы можем использовать с другой конечной итерацией, например списком.
Теперь это используется для создания индексов для элементов в списке.
Теперь, если вы хотите иметь подмножество последовательности итератора с помощью Python , вы также можете использовать для создания только части итератора.
import itertools for num in itertools.islice(itertools.count(start=0, step=10), 4): print(num) for num in itertools.islice(itertools.count(), 0, 50, 10): print(num)
Выход
0 10 20 30 0 10 20 30 40
Как видите, обе последовательности идентичны. Это показывает, что у вас может быть несколько подходов к созданию последовательностей.
Арифметические операции
Подобно действительным числам, комплексные числа также можно складывать, вычитать, умножать и делить. Давайте посмотрим, как мы могли бы это сделать в Python.
a = 1 + 2j b = 2 + 4j print('Addition =', a + b) print('Subtraction =', a - b) print('Multiplication =', a * b) print('Division =', a / b)
Выход:
Addition = (3+6j) Subtraction = (-1-2j) Multiplication = (-6+8j) Division = (2+0j)
ПРИМЕЧАНИЕ. В отличие от действительных чисел, мы не можем сравнивать два комплексных числа. Мы можем сравнивать только их действительную и мнимую части по отдельности, поскольку это действительные числа. Приведенный ниже фрагмент доказывает это.
>>> a (4+3j) >>> b (4+6j) >>> a < b Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: '<' not supported between instances of 'complex' and 'complex'
3 Логарифмические функции
Модуль предоставляет нам следующие функции для вычисления логарифмических значений чисел с десятичной запятой:
- decimal.ln();
- decimal.log10().
Функция возвращает значение натурального десятичного числа, как показано ниже.
decimal.Decimal(decimal-number).ln()
Функция decimal.log10() используется для вычисления значения журнала по основанию 10 переданного ей десятичного числа.
decimal.Decimal(decimal-number).log10()
Пример:
import decimal as d d.getcontext().prec = 2 val = d.Decimal(122.20) log = val.ln() print("Natural log value of the decimal number: ",log) log_10 = val.log10() print("Log value with base 10 of the decimal number: ",log_10)
Выход:
Natural log value of the decimal number: 4.8 Log value with base 10 of the decimal number: 2.1
Гиперболические функции
- math.sinh(x)
- Возвращает гиперболический синус угла x заданного в радианах.
- math.cosh(x)
- Возвращает гиперболический косинус угла x заданного в радианах.
- math.tanh(x)
- Возвращает гиперболический тангенс угла x заданного в радианах.
- math.asinh(x)
- Возвращает гиперболический арксинус значения x, т.е. возвращает такое значение угла y (заданного в радианах) при котором .
- math.acosh(x)
- Возвращает гиперболический арккосинус значения x, т.е. возвращает такое значение угла y (заданного в радианах) при котором .
- math.atanh(x)
- Возвращает гиперболический арктангенс значения x, т.е. возвращает такое значение угла y (заданного в радианах) при котором .
Функции для последовательностей
random.choice(seq)Возвращает случайный элемент из непустой последовательности . Если пуст, возникает ошибка .
Копировать
random.choices(population, weights=None, *, cum_weights=None, k=1)Возвращает список элементов размером , выбранных из с заменой. Если пуст, возникает ошибка .
Копировать
Если задана последовательность , выбор производится в соответствии с относительным весом. В качестве альтернативы, если задана последовательность , выбор производится в соответствии с совокупными весами (возможно, вычисляется с использованием ).
Например, относительный вес эквивалентны кумулятивному весу . Внутренне относительные веса преобразуются в кумулятивные перед выбором, поэтому поставка кумулятивного веса экономит время.
Если ни , ни не указаны, выбор производится с равной вероятностью. Если задана последовательность веса, она должна быть такой же, как и последовательность . возникает, если не правильно указан аргумент или .
или могут использовать любой тип чисел, который взаимодействует со значением , возвращаемым функцией (который включает целые числа, числа с плавающей точкой и фракции, но исключает десятичные числа).
random.shuffle(x)Перемешивает последовательность на месте.Необязательный аргумент — функция 0-аргумента, возвращающая случайное значение float в ; по умолчанию это функция .
Копировать
Чтобы перемешать неизменяемую последовательность и вернуть новый перемешанный список, используйте .
Обратите внимание, что даже для небольшого общее количество перестановок может увеличиваться сильнее, чем период большинства генераторов случайных чисел.Это означает, что большинство перестановок длинной последовательности никогда не могут быть выполнены. Например, последовательность длиной 2080 элементов является самой большой, которая может вписываться в период генератора случайных чисел «Мерсин Твистер»
random.sample(population, k)Возвращает список длиной из уникальных элементов, выбранных из последовательности или множества. Используется для случайной выборки без замены.
Копировать
Это новый список, содержащий элементы из последовательности, оставляя исходную последовательности неизменной. Новый список находится в порядке выбора, так что все суб-срезы будут также случайными последовательностями.
Это позволяет победителям розыгрышей (при выборке) делиться на главный приз, второе место и далее.
Участники не должны быть hashable или уникальными. Если последовательность содержит повторы, то каждое вхождение является возможным выбором в выборке.
Что бы выбрать одно число из ряда чисел, используйте объект в качестве аргумента. Это простое решение для выборки из большой последовательности: .
Если размер выборки больше длины последовательности, возникает ошибка .
Как отфильтровать элементы с помощью takewhile() и drop while()
Мы можем использовать Python для фильтрации элементов последовательности, если условие . Если условие становится , фильтрация прекращается.
iterator = itertools.takewhile(condition, *sequence)
Вот простой пример, который фильтрует числа, если число положительное.
import itertools sequence = itertools.takewhile(lambda x: x > 0, ) for item in sequence: print(item)
Выход
1 2 3
Здесь последовательность остановилась после 3, поскольку следующий элемент равен -1.
Точно так же фильтрует элементы, пока условие имеет значение и возвращает все элементы после первого значения, отличного от false.
import itertools data = itertools.dropwhile(lambda x: x < 5, ) for item in data: print(item)
Выход
12 7 1 -5