2016-11-11 78 views
0

我想将excel文件的列连接到另一个excel文件的其他4列。在Python中加入一个数组中的两个列表

下面的代码:

Array1 = [] 
Arraytest1 = [] 
Arraytest2 = [] 
with open('file.txt', 'r') as f: 
    for line in f: 
    List1 = line.split('\t')[:4] 
    List2 = line.split('\t')[10] 
    Arraytest1.append(List1) 
    Arraytest2.append(List2) 
    Arraytest1.extend(Arraytest2) 
    print 'Array 1 :', Arraytest1 

我在输出看到的是:

阵列1:[[ 'A', 'B', 'C', 'd'], ['E']]

数组1:[['A','B','C','D'],'E',['X1','X1','X1',' X1'],'E',Y1]

但是我是这样的:

阵列1:[ 'A', 'B', 'C', 'd', 'E']

阵列1:[ 'X1', 'X1', 'X1', 'X1', 'Y1']

阵列1:[ 'X2', 'X2', 'X2', 'X2', 'Y2']

等.. 我将感谢您的帮助

回答

1
List1 = line.split('\t')[:4] 

使得List1已经有一个列表。

Arraytest1.append(List1) 

是把这个列表插入ArrayTest1,认为ArrayTest1 = [[List1's contents]]

然后,当你正在扩展它,你一旦放平,但有一个嵌套列表,这就是为什么你看到的结果。

尝试:

List1 = line.split('\t')[:4] 
List2 = line.split('\t')[10] 
Arraytest1.extend(List1) 
Arraytest2.extend(List2) 
Arraytest1.extend(Arraytest2) 
print 'Array 1 :', Arraytest1 

或者你可以将其替换为:

Arraytest1 += List1 
Arraytest2 += List2 

我敢肯定,你知道,但append对象添加到列表中,extend增加了每个对象的迭代。

附加:

x = [1,2,3] 
x.append([4,5]) 
#x is now [1,2,3,[4,5]] 

扩展

x = [1,2,3] 
x.append([4,5]) 
#x is now [1,2,3,4,5] 
x.append(1) #throws error 

拆分返回一个列表...但有时,如果你只是想将一个字符串分解只投它。

x = "hello" 
x = x.split() 
#x is now ['hello'] 

x = "hello" 
x = list(x) 
#x is now ['h', 'e', 'l', 'l', 'o'] 

拆分句子是通常会分裂做,在Python中的字符串是iterables所以你可以扔在列表中它们分开到每一个字符。我认为这是你想要的”

编辑:根据您的意见这是一个循环的问题:

要附加添加到列表中的for循环去,但似乎你想要一个新的列表,每次它循环。您不是用干净的替换列表,而是每次都添加到列表中。尝试更换:

Arraytest1.extend(List1) 
Arraytest2.extend(List2) 

太:

Arraytest1 = List1[:] 
Arraytest2 = List2[:] 
+0

谢谢,但每当我在输出而不是''替代 'E''用'' Test'' 'Test''我看到类似'' T'','E',''S'',''T'' – Braian

+0

正在编辑我的答案,包括遗憾忘记了xD看看 – MooingRawr

+0

A,B,C,D和E在我的真实代码是名称,我用分裂因为我正在从txt文件中读取它们。这个txt文件由不同的列组成,这些列由标签分隔 – Braian