访问字符串列表中的每个字符,避免嵌套的for循环

俄亥俄

我目前正在处理一些DNA序列数据,并且需要为每个位点创建一个频率矩阵。例如,如下所示:

A   T   G   C
0.2 0.3 0.3 0.2
0.3 0.4 0.1 0.2
0.7 0.1 0.1 0.1

输入是许多DNA序列的列表,例如:

te_seqs = ["ATCTACTGATG", "ATACAGTACATAGA", "ATAGACAGTTGTGCG", "GTCGATACGT", ...]

每个序列长数千个字符,并且有数千个序列。输出是一个numpy矩阵,其中包含每个站点的频率计数。例如,在上面的数据中,第一个站点具有3个As和1个G,因此A的频率为3/4 = 0.75,G的频率为1/4 = 0.25。T和C的频率均为0。

我目前拥有所有序列的列表,并且通过将1加到Nx4矩阵来获得频率。问题是我正在处理大量序列,并且嵌套for循环在时间上并不理想:

for seq in te_seqs:
    for i,nuc in enumerate(seq):
        if nuc == "A":
            te_pwm[i, 0] = te_pwm[i, 0] + 1 
        elif nuc == "T":
            te_pwm[i, 1] = te_pwm[i, 1] + 1
        elif nuc == "G":
            te_pwm[i, 2] = te_pwm[i, 2] + 1
        elif nuc == "C":
            te_pwm[i, 3] = te_pwm[i, 3] + 1

for seq in gene_seqs:
    for i,nuc in enumerate(seq):
        if nuc == "A":
            gene_pwm[i, 0] = gene_pwm[i, 0] + 1 
        elif nuc == "T":
            gene_pwm[i, 1] = gene_pwm[i, 1] + 1
        elif nuc == "G":
            gene_pwm[i, 2] = gene_pwm[i, 2] + 1
        elif nuc == "C":
            gene_pwm[i, 3] = gene_pwm[i, 3] + 1

我的问题是1)检查字符串列表中的每个字符串是否还有更Python的方式?2)是否有更好的方法来创建基频矩阵?

谢谢!

名称

您可以用于itertools.izip_longest()遍历站点,然后用于collections.Counter进行计数:

import collections
import itertools

te_seqs = ["ATCTACTGATG", "ATACAGTACATAGA", "ATAGACAGTTGTGCG", "GTCGATACGT"]

sites = map(collections.Counter, itertools.izip_longest(*te_seqs))
for site in sites:
  A = site.get("A", 0)
  T = site.get("T", 0)
  G = site.get("G", 0)
  C = site.get("C", 0)
  total = float(A + T + G + C)
  print A / total, T / total, G / total, C / total

这产生

0.75 0.0 0.25 0.0
0.0 1.0 0.0 0.0
0.5 0.0 0.0 0.5
0.0 0.25 0.5 0.25
1.0 0.0 0.0 0.0
0.0 0.25 0.25 0.5
0.5 0.5 0.0 0.0
...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何遍历字符串列表中的每个字符串并对其元素进行操作

来自分类Dev

合并两个字符串列表

来自分类Dev

提取与每个字符串开头的模式匹配的字符串列表

来自分类Dev

如何在字符串列表中的每个字符串的开头添加字符

来自分类Dev

使用indexOf()遍历单个字符串列表

来自分类Dev

如何从字符串列表中的每个字符串中删除最后一个字符

来自分类Dev

整个字符串命令和popen中的字符串列表之间的区别

来自分类Dev

将字符串列表转换为Clojure中的单个字符串

来自分类Dev

使用python将每个字符串列表的最后一个字符加倍

来自分类Dev

循环访问Excel VBA中的字符串列表

来自分类Dev

如何通过python计算属于字符串列表的每个字符串长度?

来自分类Dev

用python中的字符串列表替换一个字符串列表

来自分类Dev

如何在批处理脚本的字符串列表中提取每个字符串的特定部分?

来自分类Dev

如何反转\ n字符串列表中的每个字符串?

来自分类Dev

比较字符串列表中字符串中每个字符的最快方法

来自分类Dev

访问列表索引中字符串中的每个字符

来自分类Dev

从熊猫的列表列中,访问列表中的每个字符串以删除数字和句点

来自分类Dev

如何从字符串列表中创建所有第n个字符的列表?

来自分类Dev

如何在熊猫字符串列表中的每个字符串上迭代代码

来自分类Dev

JSON补丁“替换”整个字符串列表

来自分类Dev

显示多个字符串列表中的一个字符串

来自分类Dev

如何遍历列表中的每个字符串?

来自分类Dev

如何从Java中的字符串列表中删除最后3个字符?

来自分类Dev

Scala:在字符串列表中的每个字符后添加字符

来自分类Dev

将前 3 个字符串与每个字符串前 3 个字符的字符串列表进行比较

来自分类Dev

显示列表中每个字符串的索引

来自分类Dev

检查部分字符串列表是否在单个字符串中?

来自分类Dev

连接列表中 2 个字符串中的每个字符

来自分类Dev

Ocaml - 对字符串列表中的每个字符串应用一个函数并返回一个新的字符串列表

Related 相关文章

  1. 1

    如何遍历字符串列表中的每个字符串并对其元素进行操作

  2. 2

    合并两个字符串列表

  3. 3

    提取与每个字符串开头的模式匹配的字符串列表

  4. 4

    如何在字符串列表中的每个字符串的开头添加字符

  5. 5

    使用indexOf()遍历单个字符串列表

  6. 6

    如何从字符串列表中的每个字符串中删除最后一个字符

  7. 7

    整个字符串命令和popen中的字符串列表之间的区别

  8. 8

    将字符串列表转换为Clojure中的单个字符串

  9. 9

    使用python将每个字符串列表的最后一个字符加倍

  10. 10

    循环访问Excel VBA中的字符串列表

  11. 11

    如何通过python计算属于字符串列表的每个字符串长度?

  12. 12

    用python中的字符串列表替换一个字符串列表

  13. 13

    如何在批处理脚本的字符串列表中提取每个字符串的特定部分?

  14. 14

    如何反转\ n字符串列表中的每个字符串?

  15. 15

    比较字符串列表中字符串中每个字符的最快方法

  16. 16

    访问列表索引中字符串中的每个字符

  17. 17

    从熊猫的列表列中,访问列表中的每个字符串以删除数字和句点

  18. 18

    如何从字符串列表中创建所有第n个字符的列表?

  19. 19

    如何在熊猫字符串列表中的每个字符串上迭代代码

  20. 20

    JSON补丁“替换”整个字符串列表

  21. 21

    显示多个字符串列表中的一个字符串

  22. 22

    如何遍历列表中的每个字符串?

  23. 23

    如何从Java中的字符串列表中删除最后3个字符?

  24. 24

    Scala:在字符串列表中的每个字符后添加字符

  25. 25

    将前 3 个字符串与每个字符串前 3 个字符的字符串列表进行比较

  26. 26

    显示列表中每个字符串的索引

  27. 27

    检查部分字符串列表是否在单个字符串中?

  28. 28

    连接列表中 2 个字符串中的每个字符

  29. 29

    Ocaml - 对字符串列表中的每个字符串应用一个函数并返回一个新的字符串列表

热门标签

归档