2016-08-26 61 views
-1

所以我有一個包含['A', 'A', 'R', 'O', 'N']列表plaintext,我想用一組letter3letter2列表稱爲letter1,到最後,等,含有['A']['A']['R']等上。如何在不克隆列表五次並刪除多餘部分的情況下執行此操作?拆分列表進入新的名單

+0

你已經試過了什麼?所以不會爲你寫代碼。如果您嘗試過某些方法,請編輯您的問題以包含您的代碼。如果沒有......那麼,去嘗試一下吧! :P –

+0

@ SebastianLenartowicz SO可能不會,但有人這樣做:P –

+0

我知道你不會爲我寫代碼,我只是想知道是否有這樣的功能。 – ohyeah2389

回答

1

可以遍歷列表:

In [1]: letters = ['A', 'A', 'R', 'O', 'N'] 

#use list comprehension to iterate over the list and place each element into a list 
In [2]: [[l] for l in letters] 
Out[2]: [['A'], ['A'], ['R'], ['O'], ['N']] 

添加標題,我們通常使用的字典。例如

#create a dictionary 
letters_dict = {} 

#iterate over original list as above except now saving to a dictionary 
for i in range(len(letters)): 
    letters_dict['letter'+str(i+1)] = [letters[i]] 

這給你以下幾點:

In [4]: letters_dict 
Out[4]: 
{'letter1': ['A'], 
'letter2': ['A'], 
'letter3': ['R'], 
'letter4': ['O'], 
'letter5': ['N']} 

您現在可以訪問各列表如下:,

In [5]: letters_dict['letters1'] 
Out[5]: ['A'] 

最後只是爲了完整性,有一個很酷的擴展的字典方法。也就是說,使用代碼從這個thread,你可以做到以下幾點:

#create a class 
class atdict(dict): 
    __getattr__= dict.__getitem__ 
    __setattr__= dict.__setitem__ 
    __delattr__= dict.__delitem__ 

#create an instance of the class using our dictionary: 
l = atdict(letters_dict) 

這樣,您就可以執行以下操作:

In [11]: l.letter1 
Out[11]: ['A'] 

In [12]: l.letter5 
Out[12]: ['N'] 

如果你沒有慾望存儲在一個迭代的值或referencable對象(也就是字典,列表類),你在你的問題建議,然後你可以從字面上做如下:

letter1 = letters[0] 
letter2 = letters[1] 
letter3 = letters[2] 
#and so forth ... 

,但你可以看到,即使有6個變量上面BEC omes乏味。

+0

也許這樣的事情會工作。我可以'letters1 = letters_dict ['letters0']'? – ohyeah2389

+1

你想''[[l] for l in letters]',而不是'[list(l)for l in letters]';後者按照巧合的預期工作(因爲一個字符串的長度是自己產生的迭代次數),但是對於長度!= 1的字符串,使用list來結束多元素列表。 – ShadowRanger

+0

好的。如果我碰巧使用類似的東西,我會確保改變這一點。 – ohyeah2389