2016-02-25 46 views
0

这是最初的代码:迭代,产生独特的列表

word_list = ['cat','dog','rabbit'] 
letter_list = [ ] 
for a_word in word_list: 
    for a_letter in a_word: 
     letter_list.append(a_letter) 
print(letter_list) 

我需要对其进行修改以产生不同的字母的列表。

可能有人请告知如何做到这一点无需使用set()

结果应该是这样的

> ['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i'] 
+2

set有什么问题?有任何限制吗?你可以使用[numpy unique](http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.unique.html) – qmaruf

+0

如果没有一套或其他东西靠近,你会感到复杂的O(n^2)而不是O(n),这更糟糕。 –

回答

2

,我可以看到唯一的问题是,你有没有,如果检查信件已经存在或不在列表中。试试这个:

>>> word_list= ['cat', 'dog', 'rabbit'] 
>>> letter_list= [] 
>>> for a_word in word_list: 
    for a_letter in a_word: 
     if a_letter not in letter_list: 
      letter_list.append(a_letter) 


>>> print letter_list 
['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i'] 
+0

我如何在不使用函数的情况下执行此操作? – user1014691

+0

编辑我的答案。请检查。 :) – Himanshu

0

使用字典,它针对基于密钥的随机查找进行了优化。如果遇到密钥,请将值保留为1。最后,在结尾处提取所有密钥。

unique_chars = {} 
word_list = ['cat','dog','rabbit'] 
for word in word_list: 
    for alph in word: 
     unique_chars[alph] = 1 #or any other value 
letter_list = unique_chars.keys() 
1

你可以这样做:

>>> word_list = ['cat', 'dog', 'rabbit'] 
>>> chars = [char for word in word_list for char in list(word)] # combine all chars 
>>> letter_list = [ii for n, ii in enumerate(chars) if ii not in chars[:n]] # remove duplicated chars 
>>> 
>>> print letter_list 
['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i'] 

希望它能帮助。

0

所有你需要做的就是添加一个条件:

if a_letter not in letter_list 

并添加a_letter不在letter_list

的代码如下:

word_list = ['cat','dog','rabbit'] 
letter_list = [] 

for a_word in word_list: 
    for a_letter in a_word: 
     if a_letter not in letter_list 
     letter_list.append(a_letter) 

print(letter_list) 

的输出这将是:

['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i'] 
1

只需在第二个循环之后放置此条件:if a_letter not in letter_list