这里是 Python 初学者。 我有两个具有相同制表符分隔信息格式的文本文件。它们包含 3 列(标识符、染色体和位置)的行,例如:
文件 1:
2323 2 125
2324 3 754
...等等
文件 2:
2323 2 150
2324 3 12000
...等等
我想创建一个列表或矩阵(不确定到底什么是最好的或它是如何工作的,也许列表列表变成了矩阵?!)通过遍历每个标识符(每行中的第一列)文件并将其与它的位置(column3)相关联,然后在下一个文件中找到这个匹配的标识符,并将另一个位置(column3)保存在这个文件中。所以最后每个标识符将与来自两个不同文件的 2 个不同位置相关联。
这就是我需要帮助的地方。对于下一步,我将寻找位置之间数值差异最大的标识符。
非常感谢任何帮助、提示或解决方案,我是 Python 初学者,具有非常基础的知识。
非常感谢!
鲁巴尔
最佳答案
import collections
d=collections.defaultdict(list)
for f in ('file1','file2'):
with open(f) as f1:
for line in f1:
ident, chrom, pos = line.split()
d[ident].append(int( pos ))
#big differences at end of list
items = sorted(d.items(), key = lambda item: abs(item[1][1] - item[1][0]))
#big differences at beginning of list
#items = sorted(d.items(), reverse = True, key = lambda item: abs(item[1][1] - item[1][0]))
在此解决方案中,我将文件中的信息存储为字典。键是标识符,值是包含位置的列表。然后我根据位置列表中第一个和第二个元素之间的差的绝对值对该字典的项目进行排序。换句话说,最大的区别在于 items
列表的末尾。
为了使其正常工作,它假定 file1
和 file2
具有相同的标识符。如果他们不这样做,您首先需要过滤项目以仅挑选出值长度为 2 的字典条目。例如
items = [(k,v) for k,v in d.items() if len(v) == 2]
items = sorted(items, ...)
关于python - 在 python 中构建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11941027/