我有一个字符数组形式的数据:
cgcgcg
aacacg
cgcaag
cgcacg
agaacg
cacaag
agcgcg
cgcaca
cacaca
agaacg
cgcacg
cgcgaa
请注意,每一列仅包含两种类型的字符。我需要根据它们在列中的百分比将它们转换为整数 0 或 1。比如第一列有8个c和4个a,所以c占多数,那么我们需要把它编码为0,另一个编码为1。
使用 zip() 我可以在 python 中转置这个数组,并将每一列放入一个列表中:
In [28]: lines = [l.strip() for l in open(inputfn)]
In [29]: list(zip(*lines))
Out[29]:
[('c', 'a', 'c', 'c', 'a', 'c', 'a', 'c', 'c', 'a', 'c', 'c'),
('g', 'a', 'g', 'g', 'g', 'a', 'g', 'g', 'a', 'g', 'g', 'g'),
('c', 'c', 'c', 'c', 'a', 'c', 'c', 'c', 'c', 'a', 'c', 'c'),
('g', 'a', 'a', 'a', 'a', 'a', 'g', 'a', 'a', 'a', 'a', 'g'),
('c', 'c', 'a', 'c', 'c', 'a', 'c', 'c', 'c', 'c', 'c', 'a'),
('g', 'g', 'g', 'g', 'g', 'g', 'g', 'a', 'a', 'g', 'g', 'a')]
没有必要将它们严格地转换为整数,即'c' 到'0' 或'c' 到int(0) 都可以,因为无论如何我们都要将它们写入一个制表符分隔的文件。