Как создать список из 50 случайных цветов в Python? - PullRequest
3 голосов
/ 30 января 2012

данный цвет = ["красный", "синий", "зеленый", "желтый", "фиолетовый", "оранжевый", "белый", "черный"] создать и распечатать список из 50 случайных цветов. Вам нужно будет использовать случайный модуль, чтобы получить случайные числа. Используйте диапазон и карту, чтобы сгенерировать необходимое количество чисел. Затем используйте карту для перевода чисел в цвета. Распечатайте результат.

Это вопрос, который мне задали, и вот мой код до сих пор

colour = [ "red", "blue", "green", "yellow", "purple", "orange", "white", "black" ]

number=random.randint(1,9)

number.range(50)

Я предполагаю, что это сделало переменную, которая выбирает случайные числа между 1-9, а затем составляет 50 из них? теперь мне нужен какой-то способ связать числа с цветами ... я знаю, что этот вопрос довольно расплывчатый, но если бы кто-то мог указать мне правильное направление, это было бы здорово!

Ответы [ 4 ]

7 голосов
/ 30 января 2012

Вам нужно использовать random.choice(seq) 50 раз, передавая colour список в качестве аргумента.

Как это:

 rand_colours = [random.choice(colour) for i in range(50)]

random.choice(seq) возвращает случайно выбранный элемент из seq.

3 голосов
/ 30 января 2012

Почему-то ваш вопрос требует использования map. Трудно помочь с этим вопросом, не дав прямого ответа, особенно потому, что эти виды манипуляций являются однострочными. Для начала используйте карту и диапазон, чтобы получить список случайных чисел в нужном диапазоне:

>>> nums = map(lambda x : random.randint(0,7), range(50))
>>> nums
[6, 6, 2, 4, 7, 6, 6, 7, 1, 4, 3, 2, 6, 1, 1, 2, 2, 0, 7, 
3, 6, 1, 5, 2, 1, 2, 6, 0, 3, 0, 2, 6, 0, 6, 3, 5, 0, 7, 
2, 5, 4, 1, 0, 0, 1, 4, 3, 3, 0, 3]

Заметьте, что аргумент лямбда, x не используется. Это как минимум одна из причин, по которой я бы не использовал здесь карту. Затем, используя список чисел, сопоставьте функцию индексации с числами, чтобы получить список цветов:

>>> cols = map(lambda i: colour[i], nums)
>>> cols
['white', 'white', 'green', 'purple', 'black', 'white', 'white', 
'black', 'blue',     'purple', 'yellow', 'green', 'white', 
'blue', 'blue', 'green', 'green', 'red', 'black', 'yellow', 
'white', 'blue', 'orange', 'green', 'blue', 'green', 'white', 
'red', 'yellow', 'red', 'green', 'white', 'red', 'white', 
'yellow', 'orange', 'red', 'black', 'green', 'orange', 'purple', 
'blue', 'red', 'red', 'blue', 'purple', 'yellow', 'yellow', 'red', 
'yellow']

Ответ, данный soulcheck, используя random.choice() в понимании списка, безусловно, является лучшим способом определения ответа.

1 голос
/ 05 апреля 2018

Если вы хотите n случайных шестнадцатеричных цветов, попробуйте это:

import random
get_colors = lambda n: list(map(lambda i: "#" + "%06x" % random.randint(0, 0xFFFFFF),range(n)))
get_colors(5) # sample return:  ['#8af5da', '#fbc08c', '#b741d0', '#e599f1', '#bbcb59', '#a2a6c0']
1 голос
/ 30 января 2012

Для этого можно использовать простое понимание списка:

[ colour[random.randint(0,len(colour)-1)] for x in range(0,50) ]

colour[i] означает i-й элемент в списке colour.Случайное целое число создается от 0 до длины списка минус один, len(colour)-1, с random.randint, как вы предложили.Это повторяется 50 раз с range(1,50).Фиктивное значение итератора x в понимании списка просто игнорируется.

Надеюсь, это поможет!

...