2016-08-26 64 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