Найти - Пользователи
Полная версия: Как узнать индекс случайно выбранного элемента последовательности?
Начало » Центр помощи » Как узнать индекс случайно выбранного элемента последовательности?
1 2 3
TohaTony
import random
WORDS = ("питон", "мышь", "кислород", "карандаш", "ответ", "стакан")
word = random.choice(WORDS)
counter = -1
for i in WORDS:
    counter += 1
    if i == word:
        break
print("Индекс случайно выбранного элемента:", counter)

Подскажите, пожалуйста, можно ли сделать так, чтобы переменная word сообщала индекс выбранного элемента или, чтобы функция random.choice() сообщала об этом? Чтобы не создавать цикл for, как это сделал я.
Спасибо.
py.user.next
>>> import random
>>> 
>>> WORDS = ("питон", "мышь", "кислород", "карандаш", "ответ", "стакан")
>>> index, word = random.choice(tuple(enumerate(WORDS)))
>>> index, word
(1, 'мышь')
>>>

Можно и так, но повторные проходы не рекомендуются.
>>> import random
>>> 
>>> WORDS = ("питон", "мышь", "кислород", "карандаш", "ответ", "стакан")
>>> word = random.choice(WORDS)
>>> word
'стакан'
>>> WORDS.index(word)
5
>>>
TohaTony
py.user.next
Немного не то. Я неправильно описал проблему.
Нужно чтобы переменная word оставалась с одним выбранным элементом и в то же время как-то получить индекс.
А так получается, что переменная принимает значения кортежа из двух элементов.

Ой, сейчас со вторым вариантом разберусь и отредактирую сообщение, а то вы сначала второй вариант не написали.

Ага, вот эта WORDS.index(word) - крутая штука!

По поводу “Можно и так, но повторные проходы не рекомендуются.” - можно подробней?
Shaman
Очень крутая.
>>> words=['python','python']
>>> words.index('python')
0
>>>
TohaTony
Shaman
Очень крутая.

Да уж.
А по другому никак?
Наверное надо открывать код функции random.choice() и дорабатывать для своих нужд.
doza_and
TohaTony
А по другому никак?
Конечно можно по другому.

import random
>>> 
>>> WORDS = ("питон", "мышь", "кислород", "карандаш", "ответ", "стакан")
>>> iword = random.randint(0,5)
>>> word = WORDS[iword]
>>> word
'стакан'
TohaTony
doza_and
Не решает проблему с повторным проходом, да и считать нужно элементы.

Shaman
Очень крутая.
И волки сыты и овцы целы.

Вроде бы решил проблему с повторными проходами. Догадался запятую после i поставить в цикле for.
import random
WORDS = ("питон", "питон", "питон", "питон", "питон",)
length = len(WORDS)
x = ()
for i in range(length):
    x += i,
index = random.choice(x)
word = WORDS[index]
print("Индекс случайно выбранного элемента: ", index)
print("Элемент последовательности: ", word)
FishHook
Это что, блин, за сумасшествие? Вы понимаете вообще, что вам говорят, или мимо ушей пропускаете?
TohaTony
FishHook
Это что, блин, за сумасшествие? Вы понимаете вообще, что вам говорят, или мимо ушей пропускаете?
Где тут сумасшетсвие?
Я ничего мимо ушей не пропустил. Мне сказали, что проблема вот в этом:
>>> words = ['python','python']
>>> words.index('python')
0
>>>

И я её решил. Теперь у меня индекс всегда указывает на элемент последовательности. И неважно, что элементы одинаковые. И я тот же random.choice использую. Как и хотел.
Только random.choice выбирает не из WORDS, а из кортежа x который соответсвует индексации кортежа WORDS, что в общем-то одно и то же.
JOHN_16
TohaTony
еще раз внимательно смотртим на пост товарища doza_and
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB