Уведомления

Группа в Telegram: @pythonsu

#1 Июль 17, 2015 06:50:18

TohaTony
Зарегистрирован: 2015-04-05
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Как узнать индекс случайно выбранного элемента последовательности?

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, как это сделал я.
Спасибо.

Отредактировано TohaTony (Июль 17, 2015 06:57:05)

Офлайн

#2 Июль 17, 2015 07:04:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Как узнать индекс случайно выбранного элемента последовательности?

>>> 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
>>>



Отредактировано py.user.next (Июль 17, 2015 07:10:33)

Офлайн

#3 Июль 17, 2015 07:14:20

TohaTony
Зарегистрирован: 2015-04-05
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Как узнать индекс случайно выбранного элемента последовательности?

py.user.next
Немного не то. Я неправильно описал проблему.
Нужно чтобы переменная word оставалась с одним выбранным элементом и в то же время как-то получить индекс.
А так получается, что переменная принимает значения кортежа из двух элементов.

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

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

По поводу “Можно и так, но повторные проходы не рекомендуются.” - можно подробней?

Отредактировано TohaTony (Июль 17, 2015 07:20:10)

Офлайн

#4 Июль 17, 2015 07:46:09

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Как узнать индекс случайно выбранного элемента последовательности?

Очень крутая.

>>> words=['python','python']
>>> words.index('python')
0
>>>

Офлайн

#5 Июль 17, 2015 08:06:53

TohaTony
Зарегистрирован: 2015-04-05
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Как узнать индекс случайно выбранного элемента последовательности?

Shaman
Очень крутая.

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

Офлайн

#6 Июль 17, 2015 09:17:40

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как узнать индекс случайно выбранного элемента последовательности?

TohaTony
А по другому никак?
Конечно можно по другому.

import random
>>> 
>>> WORDS = ("питон", "мышь", "кислород", "карандаш", "ответ", "стакан")
>>> iword = random.randint(0,5)
>>> word = WORDS[iword]
>>> word
'стакан'



Отредактировано doza_and (Июль 17, 2015 09:24:54)

Офлайн

#7 Июль 17, 2015 11:21:26

TohaTony
Зарегистрирован: 2015-04-05
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Как узнать индекс случайно выбранного элемента последовательности?

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)

Отредактировано TohaTony (Июль 17, 2015 11:25:12)

Офлайн

#8 Июль 17, 2015 11:30:03

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как узнать индекс случайно выбранного элемента последовательности?

Это что, блин, за сумасшествие? Вы понимаете вообще, что вам говорят, или мимо ушей пропускаете?



Офлайн

#9 Июль 17, 2015 11:36:37

TohaTony
Зарегистрирован: 2015-04-05
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Как узнать индекс случайно выбранного элемента последовательности?

FishHook
Это что, блин, за сумасшествие? Вы понимаете вообще, что вам говорят, или мимо ушей пропускаете?
Где тут сумасшетсвие?
Я ничего мимо ушей не пропустил. Мне сказали, что проблема вот в этом:
>>> words = ['python','python']
>>> words.index('python')
0
>>>

И я её решил. Теперь у меня индекс всегда указывает на элемент последовательности. И неважно, что элементы одинаковые. И я тот же random.choice использую. Как и хотел.
Только random.choice выбирает не из WORDS, а из кортежа x который соответсвует индексации кортежа WORDS, что в общем-то одно и то же.

Отредактировано TohaTony (Июль 17, 2015 11:49:43)

Офлайн

#10 Июль 17, 2015 12:03:59

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Как узнать индекс случайно выбранного элемента последовательности?

TohaTony
еще раз внимательно смотртим на пост товарища doza_and



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version