Python 如何从给定字母表中按升序查找单词
我有一系列的Python 如何从给定字母表中按升序查找单词,python,python-2.7,list,Python,Python 2.7,List,我有一系列的 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++)
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)
}
}
word\u list=输入(“输入单词”)
n=len(单词列表)
新列表=[]
对于(i=0;i您可以使用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']
您可以使用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']
你可以很容易地用它
Itertools
对于这类东西有一些很棒的功能。Itertools.compositions
正是你想要的
语法是:
itertools.combinations(iterable [, length] )
因此,您可以直接输入单词的列表
,因为它是一个iterable
。由于您需要所有不同的长度,您必须在for循环中执行该操作
,以获得所有长度的组合列表
因此,如果你的话是:
words = ['a', 'b', 'c', 'd']
而你做到了:
import itertools
itertools.combinations(words, 2)
您将返回一个itertools对象
,您可以使用list()
轻松地将其转换为列表:
将返回:
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
但是,如果您想要一个所有长度的列表(即仅包括“a”和“abc”),那么您可以将每个列表的每个单独列表的结果扩展到另一个所有长度的列表上。例如:
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')]
如果您想让它们更具可读性(如字符串
而不是元组
),您可以使用列表理解
combinations = [''.join(c) for c in combinations]
所以现在组合只是一个字符串数组:
['a', 'b', 'c', 'd', 'ab', 'ac', 'ad', 'bc', 'bd', 'cd', 'abc', 'abd', 'acd', 'bcd', 'abcd']
你可以很容易地用它
Itertools
对于这类东西有一些很棒的功能。Itertools.compositions
正是你想要的
语法是:
itertools.combinations(iterable [, length] )
因此,您可以直接输入单词的列表
,因为它是一个iterable
。由于您需要所有不同的长度,您必须在for循环中执行该操作
,以获得所有长度的组合列表
因此,如果你的话是:
words = ['a', 'b', 'c', 'd']
而你做到了:
import itertools
itertools.combinations(words, 2)
您将返回一个itertools对象
,您可以使用list()
轻松地将其转换为列表:
将返回:
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
但是,如果您想要一个所有长度的列表(即仅包括“a”和“abc”),那么您可以将每个列表的每个单独列表的结果扩展到另一个所有长度的列表上。例如:
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')]
如果您想让它们更具可读性(如字符串
而不是元组
),您可以使用列表理解
combinations = [''.join(c) for c in combinations]
所以现在组合只是一个字符串数组:
['a', 'b', 'c', 'd', 'ab', 'ac', 'ad', 'bc', 'bd', 'cd', 'abc', 'abd', 'acd', 'bcd', 'abcd']
你在用什么编译器/解释器运行这段代码?你在用什么编译器/解释器运行这段代码?你在用什么编译器/解释器运行这段代码?你可能在用什么编译器/解释器运行这段代码?你可能在用[1,2,3]这段代码。这段代码很好,很短,很有效!但是你得到了一个列表…如果你想要一个字符串列表,你应该做words=[''。join(w[开始:结束+1])用于范围内的开始(n)用于范围内的结束(开始,n)]
@Dadep不需要。输入将产生一个字符串,因此,单词将是一个字符串列表。是的,对不起,因为您的字符串与原始问题之间存在差异,前者包含所有字母,而后者为单词list@Dadep实际上,第一行是从问题中的代码。冲突是提问者提供的文本和代码之间的冲突,哦,是的,你说得对!我没有太注意奇怪的代码部分,对不起。这很好,很短,很有效!但是你得到了一个列表…如果你想要一个字符串列表,你应该做words=[''。加入(w[start:end+1])作为范围(n)内的开始对于范围内的结束(开始,n)]
@Dadep不需要。输入将产生一个字符串,因此,单词将是一个字符串列表。是的,对不起,因为您的字符串与原始问题之间存在差异,前者包含所有字母,而后者为单词list@Dadep实际上,第一行是从m问题中的代码。冲突在于提问者提供的文本和代码之间,哦,是的,你说得对!我没有太注意奇怪的代码部分,对不起。你的范围应该从1
到len(w)+1
而不是0
:)你的范围应该从1
到len(w)+1
不是来自0
:)