2017-05-10 37 views
0

我有一个列表:由乘法创建列表,但没有每个列表镜

newElemLines = [[ '1', '2', '5'],[ '2', '9' , '3']]

,我希望它看起来像这样:

newElemLines2 = [[[ '1', '2', '5'],[ '2', '9','3']],[['1','2','5'],['2','9','3']],[['1','2',' '5'],['2','9','3']]]

所以我想我可以只使用此代码:

newElemLines = [['1', '2', '5'], ['2', '9','3']] 
translQuant = 3 
newElemLines = [newElemLines]*(translQuant) 
nodeQuant = 11 
for i in range(0, len(newElemLines)): 
    for j in range(0, len(newElemLines[i])): 
     for x in range(0, len(newElemLines[i][j])): 
      newElemLines[i][j][x] = int(newElemLines[i][j][x]) + int((i)*nodeQuant) 

print(newElemLines) 

但是我multiplicated原始列表只是反映该行对所有4个部分名单:

newElemLines[i][j][x] = int(newElemLines[i][j][x]) + int((i)*nodeQuant) 

KFL有同样的问题: Create a list utilizing multiplication but not have each list mirror 所以我尝试使用这样的解决方案,但它仍然无法正常工作。

newElemLines = [['1', '2', '5'], ['2', '9','3']] 
nodeQuant = 11 
def make_structure(dims, fill=None): 
    fill = False if fill is None else fill 
    get_fill = lambda: fill() if callable(fill) else fill 
    global result 
    result = [] 
    for i in range(dims[0]): 
     if len(dims) > 1: 
      result.append(make_structure(dims[1:], fill=fill)) 
     else: 
      result.append(get_fill()) 

    print(result) 



fill = newElemLines 
dims = [3] 
make_structure(dims, fill) 
newElemLines = result 



for i in range(0, len(newElemLines)): 
    for j in range(0, len(newElemLines[i])): 
     for x in range(0, len(newElemLines[i][j])): 
      newElemLines[i][j][x] = int(newElemLines[i][j][x]) + int((i)*nodeQuant) 

print(newElemLines) 
+1

不要使用列表乘法。 – user2357112

+0

请把它降低到[mcve]。强调**最小**。是的,列表乘法不符合你的期望。 –

回答

0

使用列表乘法:

newElemLines = [['1', '9', '1', '2'], ['2', '9', '2', '3'], ['3', '9', '3', '1'], ['4', '7', '4', '5', '6', '7', '8', '9', '10', '11']] 

translQuant = 4 

final_list = newElemLines*translQuant 

使用列表理解:

newElemLines = [['1', '9', '1', '2'], ['2', '9', '2', '3'], ['3', '9', '3', '1'], ['4', '7', '4', '5', '6', '7', '8', '9', '10', '11']] 

translQuant = 4 
second_list = [[i] for i in newElemLines] 
final_list = [second_list[0] for i in range(translQuant)] 
0

这是很难准确地了解你所追求的,但我想你想创建一个新的列表的独立元素。实现最简单的方法是使用deepcopycopy模块:

from copy import deepcopy 

newElemLines = [['1', '2', '5'], ['2', '9','3']] 
translQuant = 3 

# As for loop: 
newElemLines2 = [] 
for _ in xrange(translQuant): 
    newElemLines2.append(deepcopy(newElemLines)) 

# Or as list comprehension: 
newElemLines2 = [deepcopy(newElemLines) for _ in xrange(translQuant)] 

deepcopy的确保您复制的一切,包括子清单,逐个元素。

+0

我猜xrange是一个错字?当我使用范围代替它时,它工作完美!非常感谢你! – Vipr0

+0

'xrange'是python 2,在python 3中它只是'range',正如你所指出的那样。 – JohanL