Выбор номера выбора - PullRequest
       11

Выбор номера выбора

2 голосов
/ 04 февраля 2020

У меня есть список, nums, и я хочу использовать случайный модуль, чтобы выбрать из списка элемент, который не 0.

Пока у меня есть:

nums = [25, 0, 50, 0, 2, 45, 0]

for numbers in nums:
    for numbers != 0:
        s = random.choice(nums)
print(s)

Но, похоже, это не работает. Я ожидаю, что s будет одним из [25, 50, 2, 45] Как мне этого добиться?

Ответы [ 3 ]

3 голосов
/ 04 февраля 2020

Вы можете использовать следующее понимание списка, которое использует random.choice для выбора из списка всех элементов в числах, которые не равны 0.

>>> s = random.choice([n for n in nums if n != 0])
1 голос
/ 04 февраля 2020

потому что ваше значение, которого следует избегать, составляет 0, вы также можете использовать filter встроенную функцию с bool:

s = random.choice(list(filter(bool, nums)))

, чтобы избежать создания нового списка, который вы можете использовать, пока l oop:

s = 0
while s == 0:
    s = random.choice(nums)
0 голосов
/ 04 февраля 2020

Простое решение: создайте пустой список для чисел, отличных от 0. Итерируйте по nums и добавьте в этот список эти числа. Затем выберите случайный выбор.

filtered_nums = []
for num in nums:
    if num != 0:
        filtered_nums.append(num)
s = random.choice(filtered_nums)

Незначительное решение: используйте функцию python * filter.

filtered_nums = list(filter(lambda x: x != 0, nums))
s = random.choice(filtered_nums)

Python * filter это очень круто, очень стоит научиться его использовать: https://www.w3schools.com/python/ref_func_filter.asp

...