объединение двух элементов из двух списков в случайном порядке - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь случайным образом сопоставить два элемента из списка и кортежа. Моя цель - создать строку с соответствием от 1 до 1.

Ниже приведен идеальный код, которого я пытаюсь достичь в итоге.

>>> color = ['red', 'orange', 'yellow']
>>> transportation = ('car', 'train', 'airplane')
>>> combination(color, transportation)

['a red car', 'a yellow train', 'a orange airplane']

Вот что у меня есть.

def combination(color, transportation):
    import random
    import itertools
    n = len(colors)
    new = random.sample(set(itertools.product(color, transportation)), n)
    return new

[('red', 'car'), ('orange', 'car'), ('red', 'airplane')]

Как видите, красный цвет используется дважды, а транспортный автомобиль также используется дважды.

У меня проблемы с назначением каждой перевозки только одному цвету, а каждый цвет - только одной перевозке.

Кроме того, я был бы очень признателен за советы о том, как превратить кортеж в строку. ex) ('red', 'car') -> 'красная машина' для каждого элемента в моем списке.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Вы также можете попробовать вот так.

Используйте random.shuffle() и zip().

>>> import random
>>>
>>> color = ['red', 'orange', 'yellow']
>>> transportation = ('car', 'train', 'airplane')
>>>
>>> random.shuffle(color)
>>>
>>> list(zip(color, transportation))
[('yellow', 'car'), ('orange', 'train'), ('red', 'airplane')]
>>>
>>> random.shuffle(color)
>>> list(zip(color, transportation))
[('red', 'car'), ('yellow', 'train'), ('orange', 'airplane')]
>>>
>>> random.shuffle(color)
>>> list(zip(color, transportation))
[('orange', 'car'), ('red', 'train'), ('yellow', 'airplane')]
>>>
0 голосов
/ 10 ноября 2018

что-то подобное может работать:

from random import shuffle

color = ['red', 'orange', 'yellow']
transportation = ('car', 'train', 'airplane')

t_list = list(transportation)
shuffle(color)
shuffle(t_list)

new_lst = list(zip(color, t_list))
print(new_lst)
#  [('red', 'train'), ('orange', 'car'), ('yellow', 'airplane')]

обратите внимание, что вы должны преобразовать transportation в список для random.shuffle work: shuffle изменяет список вместо.

что касается второй части вашего вопроса: str.join поможет:

for col_trans in new_lst:
    print(' '.join(col_trans))
# red train
# orange car
# yellow airplane
...