2016-11-04 56 views
-2

我一直在试图组织和分析数组中的大量数据。但是,我的代码似乎没有按照我想要的方式运行。分析多个阵列

我试图使用数组A(数据阵列)和B(参考值数组),以输出一个可重复使用的阵列,C.

输入数组:

A = [1 A B, 1 C D, 1 E F, 4 A B, 4 C D, 4 E F, 7 A B, 7 C D, 7 E F] 

B = [1, 4, 7] 

输出(可重复使用的)阵列:

C = [1 A B, 1 C D, 1 E F] after clearing, this array becomes 

C = [4 A B, 4 C D, 4 E F] after clearing, this array becomes 

C = [7 A B, 7 C D, 7 E F] 

这是我到目前为止有:

#Creating the Reference Array. This works perfectly. 
B = [] 
keywords = open("source.txt", 'r') 
for line in keywords: 
    if "1" in line or "4" in line or "7" in line: 
    reference = line.split() 
    rowName = reference[0] 
    if rowName not in B: 
     B.append(rowName) 

#Creating reusable array. Does not work very well. 
A = [] 
C = [] 
with open("source.txt", 'r') as temp: 
    for line in temp: 
     A.append(line) 
for item in B: 
    for item in line in A: 
     print line 
     C.append(line) 
     print C 
     del C[:] 

任何帮助将不胜感激,谢谢。

+0

你'A','B'&'C'是_lists_(Python也有一些不同的数组对象,并且还有Numpy数组)。正如目前所写,你的'A'和'C'不是有效的Python。看起来他们应该包含字符串,所以你应该修复它。使用['groupby']这个任务会更简单(https://docs.python.org/3/library/itertools.html#itertools.groupby)。 –

+0

'对于A'中的项目''是无效的语法。 – chthonicdaemon

+1

完美无瑕的有效语法,根本无法达到这里所要做的。 – chthonicdaemon

回答

0

你不能只用filter这个吗?

考虑:

>>> A = ['1 A B', '1 C D', '1 E F', '4 A B', '4 C D', '4 E F', '7 A B', '7 C D', '7 E F'] 

您可以通过字符串的开头元素过滤:假设统一的特征

>>> filter(lambda s: s[0]=='1', A) 
['1 A B', '1 C D', '1 E F'] 
>>> filter(lambda s: s[0]=='4', A) 
['4 A B', '4 C D', '4 E F'] 
>>> filter(lambda s: s[0]=='7', A) 
['7 A B', '7 C D', '7 E F'] 

或者,

>>> for e in ('1', '4', '7'): 
... print filter(lambda s: s.startswith(e), A) 
... 
['1 A B', '1 C D', '1 E F'] 
['4 A B', '4 C D', '4 E F'] 
['7 A B', '7 C D', '7 E F'] 
+0

我提供的例子可能会给人留下这样的印象,但我正在使用的数据量很大,每个过滤器的硬编码效率非常低。 –

+0

您不必对过滤器进行硬编码。我只是展示了它的一个例子。 – dawg

1

的是,第一场是对于C的每一个步骤都是一样的,并且构成了我自己的数据文件:

source.txt: 
1 A B 
1 C D 
1 E F 
4 A B 
4 C D 
4 E F 
7 A B 
7 C D 
7 E F 

我们可以建立群组,因为我们去把文件读一次:

from operator import itemgetter 
from itertools import groupby 

lines = (line.strip().split() for line in open('source.txt')) 
for leadingitem, group in groupby(lines, itemgetter(0)): 
    C = list(group) 
    print(C) 

输出是

[['1', 'A', 'B'], ['1', 'C', 'D'], ['1', 'E', 'F']] 
[['4', 'A', 'B'], ['4', 'C', 'D'], ['4', 'E', 'F']] 
[['7', 'A', 'B'], ['7', 'C', 'D'], ['7', 'E', 'F']] 
+0

感谢你做了一个“groupby”答案。在OP完成他们的样本数据后,我打算做一个...... :) –