在Python中组合单词(排列?)

5 投票
5 回答
3824 浏览
提问于 2025-04-15 19:30

假设我有4个单词,放在一个字符串里。
我该怎么把它们连接起来,像这样?

s = orange apple grapes pear

结果会是一个字符串:

"orangeapple/orangegrapes/orangepear/applegrapes/applepear/grapespear/orangeapplegrapes/orangeapplepear/applegrapespear"

我在想:

list_words = s.split(' ')
for l in list_words:

然后用enumerate吗?这是你会用来实现这个功能的方法吗?

5 个回答

1
s = 'orange apple grapes pear'

list_words = s.split()

num = len(list_words)
ans = []
for i in xrange(1,2**num-1):
  cur = []
  for j,word in enumerate(list_words):
    if i & (1 << j):
      cur.append(word)
  if len(cur) > 1: 
    ans.append(''.join(cur))
print '/'.join(ans)

这个代码会生成一个单词列表的所有子集,除了空集、单个单词和整个列表本身。
举个例子:
orangeapple/orangegrapes/applegrapes/orangeapplegrapes/orangepear/applepear/orangeapplepear/grapespear/orangegrapespear/applegrapespear

4

这段代码的意思是……

首先,它会做一些检查,看看输入的内容是否符合要求。如果不符合,就会给出一个错误提示。

接着,如果一切正常,它会继续执行后面的操作,比如处理数据或者进行计算。

最后,代码会返回一个结果,告诉你操作的结果是什么。

总的来说,这段代码就是在确保输入正确后,进行一些处理,并返回结果。

>>> from itertools import combinations
>>> s = "orange apple grapes pear".split()
>>> '/'.join([''.join(y) for y in [ x for z in range(len(s)) for x in combinations(s,z)] if len(y)>1])
'orangeapple/orangegrapes/orangepear/applegrapes/applepear/grapespear/orangeapplegrapes/orangeapplepear/orangegrapespear/applegrapespear'
4

也许这就是你想要的?

s = "orange apple grapes pear"

from itertools import product
l = s.split()
r='/'.join(''.join(k*v for k,v in zip(l, x))
           for x in product(range(2), repeat=len(l))
           if sum(x) > 1)
print r

如果在'a b c'上运行(为了更清楚),结果是:

bc/ac/ab/abc

(根据提问者的评论更新。)

撰写回答