小编Ian*_*des的帖子

使用Python正则表达式拆分非重叠字符组(ORF发现)

我正在寻找一种漂亮的pythonic方法来找到DNA序列中的开放阅读框架.我发现许多在线实现使用索引,标志和其他这样的丑陋.

我很确定可以创建正则表达式实现,但我对正则表达式不好.一般的想法是我想通过'ATG','TAG','TGA'和'TAA'分割出一串DNA序列.但是我不想在重叠区域上分裂,例如序列'ATGA'应该分成'ATG','A'.基本上在三个框架中的每个框架中从左到右.

为清晰起见编辑:如评论中所述,尽管存在(在非零帧中),但ATGATTTTGA应该将一个序列拆分为ATG,TTTTGATGA

edit2:这就是我在没有正则表达式的情况下使用list comprehension splitting链接实现的方法.我讨厌使用旗帜.

def find_orf(seq):
    length = 0
    stop = ['TAA','TGA','TAG']
    for frame in range(3):
        orfFlag, thisLen = None, 0
        splitSeq = [seq[start+frame:start+frame+3] for start in range(0,len(seq),3)]
        for codon in splitSeq:
            if codon == 'ATG':
                orfFlag = True
                thisLen += 1
            elif orfFlag and codon in stop:
                orfFlag = None
                if thisLen > length:
                    length = thisLen
            else:
                thisLen += 1
    return length
Run Code Online (Sandbox Code Playgroud)

python regex

5
推荐指数
1
解决办法
1073
查看次数

按成员列表的长度对列表列表进行排序

我从作为S4对象类型的包(apcluster)输出.其中一个成员是确定找到的每个群集成员的列表.我想按长度(最大的簇)排序该列表.

我的代码现在看起来像

ap.result <- apcluster(args)
clusters <- ap.result@cluster #list of lists
Run Code Online (Sandbox Code Playgroud)

那么我可以访问的各个成员clusters通过clusters[[i]],但该命令是半随机的.如果我unlist(clusters)然后我得到一个向量而不知道它来自哪个子列表.

如何ap.result@cluster按最长成员列表排序到最短的成员列表?

r

5
推荐指数
2
解决办法
2010
查看次数

将重叠的数字范围合并为连续范围

我正在尝试将一系列基因组坐标合并为连续范围,并提供一个用于跨间隙合并的附加选项。

例如,如果我有基因组范围,[[0, 1000], [5, 1100]]我希望结果是[0, 1100]. 如果偏移选项设置为100,并且输入为 ,[[0, 1000], [1090, 1000]]我将再次希望结果为[0, 1100]

我已经实现了一种执行此操作的方法,该方法按顺序逐步完成对齐,并尝试合并上一个结束位置和下一个起始位置,但它失败了,因为实际结果的长度不同。例如,我[[138, 821],[177, 1158], [224, 905], [401, 1169]]的列表中的结果按开始位置排序。答案应该是[138, 1169],但我却得到了[[138, 1158], [177, 905], [224, 1169]]。显然,我需要考虑的不仅仅是前一个结束和下一个开始,但我还没有找到一个好的解决方案(最好不是一大堆 if 语句)。有人有什么建议吗?

def overlap_alignments(align, gene, overlap):
    #make sure alignments are sorted first by chromosome then by start pos on chrom
    align = sorted(align, key = lambda x: (x[0], x[1]))
    merged = list()
    for i in xrange(1, len(align)):
        prv, nxt …
Run Code Online (Sandbox Code Playgroud)

python algorithm bioinformatics

4
推荐指数
1
解决办法
2279
查看次数

鲁棒加权随机串发生器

我已经实现了以下类,根​​据输入频率'p'生成'p'或'q'.但是,如果频率小于用于存储选项的列表的大小,则此实现会中断.有没有办法可以实现这个来为p的任何值工作?

from random import random

class AlleleGenerator(object):
    """
    allele generator - will break if p < 0.001
    """
    def __init__(self, p):
        """construct class and creates list to select from"""
        self.values = list()
        for i in xrange(int(1000*p)):
            self.values.append('p')
        while len(self.values) <= 1000:
            self.values.append('q')
    def next(self):
        """Returns p or q based on allele frequency"""
        rnd = int(random() * 1000)
        return self.values[rnd]
    def __call__(self):
        return self.next()
Run Code Online (Sandbox Code Playgroud)

python

3
推荐指数
1
解决办法
253
查看次数

在可变数量的图之后强制R PDF到新页面

根据输入数据的大小/形状,每页上可以有偶数或奇数的图.

我设置par(mfrow)为值,使得它是可以容纳所有图的最小网格,但是现在我想确保它在下一个循环迭代中移动到下一页,在图的总数最终奇数或不适合网格.

如何强制新页面?谷歌向我展示了grid.newpage(),但我得到了错误

> grid.newpage()
Error: could not find function "grid.newpage"
Run Code Online (Sandbox Code Playgroud)

当我尝试使用它.此外,除非我弄错了,基础绘图不会grid反正使用,所以这对我没有帮助.

pdf pdf-generation r

3
推荐指数
1
解决办法
3904
查看次数

与外部相比,在列表理解中创建集合时的时间差异很大

我有下面的测试用例,我在其中找到两个字符串中的元素,并按照第一个字符串的顺序返回它们.为什么是第二种情况,set(string2)列表理解中的内容在一个数量级上减慢了?

import timeit
timeit.timeit(
    """
    import random, string
    string1 = ''.join(random.choice(string.ascii_uppercase) for _ in range(100000))
    string2 = ''.join(random.choice(string.ascii_uppercase) for _ in range(100000))
    v=set(string2)
    [x for x in string1 if x in v]
    """,
    number=10,
)
# 2.005337953567505

timeit.timeit(
    """
    import random, string
    string1 = ''.join(random.choice(string.ascii_uppercase) for _ in range(100000))
    string2 = ''.join(random.choice(string.ascii_uppercase) for _ in range(100000))
    [x for x in string1 if x in set(string2)]
    """,
    number=10,
)
# 22.1062970161438
Run Code Online (Sandbox Code Playgroud)

python

3
推荐指数
1
解决办法
49
查看次数

继承networkx Graph并使用nx.connected_component_subgraphs

我正在尝试对 networkx Graph 对象进行子类化。我的__init__有一个变量传递给它。但是,这意味着当我尝试使用以下调用的方法时connected_component_iter

def connected_component_iter(self):
    """
    Yields connected components.
    """
    assert self.is_built is True
    for subgraph in nx.connected_component_subgraphs(self):
        yield subgraph
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "src/unitigGraph.py", line 163, in connected_component_iter
    def connected_component_iter(self):
  File "/Library/Python/2.7/site-packages/networkx/algorithms/components/connected.py", line 94, in connected_component_subgraphs
    yield G.subgraph(c).copy()
  File "/Library/Python/2.7/site-packages/networkx/classes/graph.py", line 1486, in subgraph
    H = self.__class__()
TypeError: __init__() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

我真的不想删除我的初始化类变量。有什么方法我仍然可以使用 的connected_component_iter方法Graph吗?

python networkx

3
推荐指数
1
解决办法
2284
查看次数

查找数字子集的分组

假设我有这些数字集

a = {1, 2, 3}
b = {2, 3, 4}
c = {1, 5}
Run Code Online (Sandbox Code Playgroud)

我想找到集合的所有不同的数字分组.结果将是

{1}, {2, 3}, {4}, {5}
Run Code Online (Sandbox Code Playgroud)

我的天真方法,不起作用,是这样的:

data = [{1, 2, 3}, {2, 3, 4}, {1, 5}]
for i in range(1, 5):
    s = set.intersection(*[x for x in data if i in x])
    print(s)
Run Code Online (Sandbox Code Playgroud)

哪个回报

set([1])
set([2, 3])
set([2, 3])
set([2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

哪个可以很容易地重复删除,但不会给出预期的结果.

如何只获取集合子集中存在的数字分组?

python intersection set

3
推荐指数
1
解决办法
43
查看次数

在python中组合列表列表(类似于string.join但是作为列表理解?)

如果你有一个很长的列表列表[['A',1,2],['B',3,4]],你希望将它组合成['A, 1, 2', 'B, 3, 4']一个简单的列表理解方式吗?

我是这样做的:

this_list = [['A',1,2],['B',3,4]]
final = list()
for x in this_list:
     final.append(', '.join([str(x) for x in x]))
Run Code Online (Sandbox Code Playgroud)

但这是否可以作为一个班轮来完成?

谢谢你的回答.我喜欢基于map()的一个.我有一个后续问题 - 如果子列表不是格式['A',0.111,0.123456],那么可以在列表解析中包含一个字符串格式化部分来截断,例如退出'A, 0.1, 0.12'

再一次用我丑陋的代码就像是:

this_list = [['A',0.111,0.12345],['B',0.1,0.2]]
final = list()
for x in this_list:
    x = '{}, {:.1f}, {:.2f}'.format(x[0], x[1], x[2])
    final.append(x)
Run Code Online (Sandbox Code Playgroud)

我解决了自己的问题:

values = ['{}, {:.2f}, {:.3f}'.format(c,i,f) for c,i,f in values]
Run Code Online (Sandbox Code Playgroud)

python list

2
推荐指数
1
解决办法
183
查看次数

peewee.OperationalError:只有150行*8列的upsert上有太多的SQL变量

使用下面的示例,在我的机器上,设置range(150)会导致错误,而range(100)不是:

from peewee import *

database = SqliteDatabase(None)

class Base(Model):
    class Meta:
        database = database


colnames = ["A", "B", "C", "D", "E", "F", "G", "H"]
cols = {x: TextField() for x in colnames}

table = type('mytable', (Base,), cols)
database.init('test.db')
database.create_tables([table])

data = []
for x in range(150):
    data.append({x: 1 for x in colnames})


with database.atomic() as txn:
    table.insert_many(data).upsert().execute()
Run Code Online (Sandbox Code Playgroud)

导致:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "/cluster/home/ifiddes/python2.7/lib/python2.7/site-packages/peewee.py", line 3213, in execute …
Run Code Online (Sandbox Code Playgroud)

python sqlite peewee

2
推荐指数
1
解决办法
2944
查看次数