#python-3.x
Вопрос:
Как бы я присоединился к итерации со случайной (или иным образом выбранной) строкой?
from itertools import cycle
options = cycle((
' and ',
' also ',
', ',
' not to mention '
))
things = ["thing A", "thing B", "thing C", "thing D also", "some other things"]
print(next(options).join(things))
Выход: thing A and thing B and thing C and thing D also and some other things
Желаемый результат: thing A and thing B also thing C, thing D not to mention some other things
Что я пробовал:
from itertools import cycle
options = cycle((
' and ',
' also ',
', ',
' not to mention '
))
things = ["thing A", "thing B", "thing C", "thing D also", "some other things"]
result = ''
for i, s in enumerate(things, 1):
result = s
if i % len(s):
result = next(options)
print(result)
Выход: thing A and thing B also thing C, thing D also not to mention some other things and
Желаемый результат: thing A and thing B also thing C, thing D also not to mention some other things
Это делает больше вещей, которых я не хочу, в зависимости от длины things
, а также
Ответ №1:
Вы можете использовать functools.reduce()
вместе с random.choice()
:
import functools
import random
options = (" and ", " also ", ", ", " not to mention ")
def random_join(a, b):
return random.choice(options).join((a, b))
functools.reduce(random_join, things)
Выход:
'thing A, thing B and thing C not to mention thing D also and some other things'
Обратите внимание, однако, что у вас есть thing D also
, в things
чем я не уверен, было намеренно, и иногда это приводит к неловким результатам:
'thing A and thing B, thing C, thing D also also some other things'