我有一系列的
words=[a,b,c,d]
我想找到可以按升序排列的单词。
结果列表
[a,ab,abc,abcd,b,bc,bcd,c,cd,d]
怎么做。
我有代码但它有C和python混合,有人可以用它的python等价物来帮助我。
在这里:
word_list=input("Enter the word")
n=len(word_list)
newlist=[]
for(i=0;i<n;i++)
{
c=''
for(j=i;j<n;j++)
{
c.join(j)
newlist=append(c)
}
}
答案 0 :(得分:1)
letters = input("Enter the word")
n = len(letters)
words = [letters[start:end+1] for start in range(n) for end in range(start, n)]
答案 1 :(得分:0)
您可以使用itertools
:
>>> import itertools
>>> w=['a','b','c','d']
>>> result=[]
>>> for L in range(1, len(w)+1):
... for subset in itertools.combinations(w, L):
... result.append(''.join(subset))
...
>>> result
['a', 'b', 'c', 'd', 'ab', 'ac', 'ad', 'bc', 'bd', 'cd', 'abc', 'abd', 'acd', 'bcd', 'abcd']
答案 2 :(得分:0)
itertools.combinations
Itertools
对于这类事情有一些很棒的功能。 itertools.combinations
完全符合您的要求。
语法为:
itertools.combinations(iterable [, length] )
因此您可以直接输入list
words
iterable
。for-loop
。由于您需要所有不同的长度,您必须在words = ['a', 'b', 'c', 'd']
中进行以获取所有长度的组合列表。
所以如果你的话是:
import itertools
itertools.combinations(words, 2)
你做了:
itertools object
您将获得list()
,您可以轻松转换为list(itertools.combinations(words, 2))
的列表:
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
将返回:
extend
但是,如果你想要一个包含所有长度的列表(例如只包括&#39; a&#39;和#39; abc&#39;)那么你只需要import itertools
words = ['a', 'b', 'c', 'd']
combinations = []
for l in range(1, len(words) + 1):
combinations.extend(list(itertools.combinations(words, l )))
每个列表的结果将每个列表放到另一个所有长度的列表中。如下所示:
[('a'), ('b'), ('c'), ('d'), ('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b, 'd'), ('c', 'd'), ('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd), ('a', 'b', 'c', 'd')]
这将给你结果:
strings
如果您希望这些内容更具可读性(tuples
而不是list comprehension
),则可以使用combinations = [''.join(c) for c in combinations]
...
['a', 'b', 'c', 'd', 'ab', 'ac', 'ad', 'bc', 'bd', 'cd', 'abc', 'abd', 'acd', 'bcd', 'abcd']
所以现在组合只是一个字符串数组:
public WebinarCategories Categories { get; set; }