在python矩阵中打印列而不是列表

时间:2014-08-26 14:31:44

标签: python list matrix multidimensional-array

我有一个这样的文本文件:

abc 4   2   3   4   1   4   1   2   3   3
abc 4   2   3   4   1   4   1   2   3   3
def 4   3   3   4   1   4   1   2   3   3
def 4   3   3   4   1   4   1   2   3   3
ghi 4   5   3   4   1   4   1   2   3   3
ghi 4   5   3   4   1   4   1   2   3   3
jkl 4   6   3   4   1   4   1   2   3   3
jkl 4   6   3   4   1   4   1   2   3   3
mno 4   8   3   4   1   4   1   2   3   3
mno 4   8   3   4   1   4   1   2   3   3

我想从列中随机替换数据,其中0表示第1列中给出的标识符。每个标识符有两行。我想随机替换0行。我将每列放入一个列表,然后选择一个随机的奇数,n个所需的时间,并将该索引和先前的索引替换为0。

我的代码看起来像

for i in range(1,11): #The file has 11 columns
    for line in open("structure.tsv",'r'):
        splitFile=line.strip().split("\t")
        temp_array.append(splitFile[i])
    for x in random.sample(range(1,10),3): #Replace values for any three identifiers randomly
        temp_array[x]=0
        temp_array[x-1]=0
    print temp_array
    temp_array=[]

我输出如下:

[0, 0, '4', '4', '4', '4', 0, 0, 0, 0]
[0, 0, 0, 0, '5', '5', '6', '6', 0, 0]
['3', '3', 0, 0, 0, 0, 0, 0, '3', '3']
['4', '4', 0, 0, 0, 0, 0, 0, '4', '4']
[0, 0, '1', '1', '1', '1', 0, 0, 0, 0]
['4', '4', 0, 0, '4', '4', 0, 0, 0, 0]
['1', '1', 0, 0, 0, 0, 0, 0, '1', '1']
[0, 0, '2', '2', 0, 0, 0, 0, '2', '2']
[0, 0, 0, 0, 0, 0, '3', '3', '3', '3']
[0, 0, '3', '3', 0, 0, 0, 0, '3', '3']

但我希望输出类似于输入文件的输出。

abc 0   0   3   4   0   4   1   0   0   0
abc 0   0   3   4   0   4   1   0   0   0
def 4   0   0   0   1   0   0   2   0   3
def 4   0   0   0   1   0   0   2   0   3
ghi 4   5   0   0   1   4   1   0   0   0
ghi 4   5   0   0   1   4   1   0   0   0
jkl 0   6   0   0   0   0   0   0   3   0
jkl 0   6   0   0   0   0   0   0   3   0
mno 0   0   3   4   0   0   0   2   3   3
mno 0   0   3   4   0   0   0   2   3   3

1 个答案:

答案 0 :(得分:0)

我认为您可以通过采用不同的方法来存储和处理数据来解决这个问题。想想字典(或者如果订单很重要,ordered dictionaris

考虑按如下方式存储您的数据:

data = {"abc":([list of first line of numbers],[list of second line of numbers]), and so on}

然后您可以随机选择三个字符串,并用零替换每个列表的第一个数字。

for key in randomelyChosenList:
    data[key][0][0] = 0
    data[key][1][0] = 0

这样可以确保两条线都可以随时更改,并且可以更轻松地将数据写回文件