Going to a certain position in a string
我想得到一根弦上的某一点,它与我所得到的弦(从负方向)相反。
AAAAAAAA CCCCCCCC TTTTTTTTTTTTTTGGGGGGG公司tttttttttt ggggggggg aaaaaaaaaaaa cccccccc公司
所以你需要转换坐标。在底部钢绞线上,底部0(最右侧C)与顶部钢绞线上的底部39相对。基1与基38相对。基2与判例37相反。(重要的一点:注意每次加上这两个数字会发生什么。)所以基数10对应基数29,基数19对应基数20。
所以:如果我想在底链上找到基10-20,我可以看看顶部的基20-29(然后反向补码)。
我写了以下内容:
1 2 3 4 5 6 7 8 9
| fp = open(infile, 'r')
for line in fp:
tokens = line.split()
exonstarts = tokens[8][:-1].split(',')
exonends = tokens[9][:-1].split(',')
zipped = list(zip(exonstarts, exonends))
chrom_len = len(chr_string)
s = ''.join(bc[base.upper()] for base in chr_string[-starts-1:-ends-1] for starts, ends in zipped)+'
' |
然而,每次我这样做,我都会得到:
错误:未定义全局名称"starts"
我该怎么解决这个问题??
- 我应该定义什么样的开始?
- exinstarts引用了一个列表,但是…我希望每对元素的第一个元素都是这样开始的,[(1,2),(3,4),(5,6)](这个列表是我定义的"zipped")开始将是1,然后是3和5,而结束将是对中的另一个数字。
- 我认为用"for starts,ends in zipped"这个代码可以做到这一点,因为在每个圆括号内的两个元素是start,end…
- 什么是chr_string?
- 我要穿过的绳子
- 如果您继续在这里定义它,而不是使用line in fp,这将非常有帮助,可能将fp定义为多行字符串,并使用for line in fp.split('
'):,以便我们可以尝试运行它。
尝试在最后一个术语周围添加括号:
1 2 3 4 5
| s = ''.join(bc[base.upper()] for base in (chr_string[-starts-1:-ends-1]\
^
for starts, ends in zipped)) +'
'
^ |
在这里定义两个不同的生成器。这相当于:
1 2 3 4
| strands = (chr_string[-starts-1:-ends-1] for starts, ends in zipped)
complementary_strands = (bc[base.upper()] for base in stage_1)
joined_exons = ''.join(stage_2) + '
' |
- 我也要试试看我能想出什么办法
- 把它分为三个阶段肯定是一条路要走(+1),但是这些阶段应该有比_1,_2,_3更有意义的名字。
- 好吧,听起来不错。我的最后一个也需要分解吗,或者它是好的吗?如果strand='+':s='.join([chr_string[starts:ends]表示开始,以zipped]结尾)
- 分解它有助于提高可读性,并帮助您找出代码的问题所在。如果需要,可以将其作为一个表达式保存。它不会影响发电机的功能。这取决于你
- 断线不是必要的,也没有帮助。
- 好的,它还告诉我我正在尝试a-到a-to-str。所以为了解决这个问题,我只需将chr_-string[-starts-1:-ends-1]更改为chr_-string[-(int(starts)+1):-(int(ends)+1)]对吗?
- 但当我这样做时,我得到keyror:""这意味着什么??
- 有人能告诉我我所做的是否正确吗??
- 我认为开始和结束就像"A"和"G",所以我想我会放弃,除非你定义了问题中的一切。@约翰西Web对最初的问题有正确的答案,也许…至少开始被定义。
- 不,starts是压缩格式的数字,字符串上使用的实际数字坐标
看起来您在生成器表达式中做了太多的工作。
两个for是错误的。你的意思是:
1 2
| s = ''.join(bc[base.upper()] for starts,ends in zipped for base in chr_string[-starts-1:-ends-1])+'
' |
然后为第二个for定义starts和ends。
考虑到您今天提出的问题,我建议您阅读一本好书,例如深入了解python 3,这样您就可以自己解决这些问题。
- 我试试看!
- 哈哈,谢谢,我去看看。所有这些对我来说都是新的
- @斯凯:我没有这样的暗示。这本书的推荐是有帮助的,很明显帕特里克还没有读到一本关于Python的好书。
- 够公平的,编辑
- 斯凯尔:完成了。投反对票的是没有用的答案。请勿将其用于其他用途。
- @JohnsyWeb可以编辑这个答案使开始和结束是整数,因为现在它们是字符串,不允许将-or-1添加到它们中
- ^^我想如果你能弄到这个,我的程序就可以运行了
- @PatrickCampbell你已经知道如何用int(start)把字符串变成整数了,你在评论另一个答案时自己做的!
- 你说得对@weronika.但这不起作用。但我知道我需要做什么。我需要做几天前我们尝试过的事情,从字符串长度中减去结尾,然后从字符串长度中减去开始。你知道怎么做吗??
- @帕特里克坎贝尔:请不要在任意回答的评论中提出新的问题;这不是这个社区的工作方式。
- @PatrickCampbell继续之前,你真的应该接受Johnsyweb的建议,阅读一本Python书籍或教程。当你似乎完全不理解语言是如何结合在一起的时候,帮助你是非常困难的。
您定义了exinstarts,然后引用了starts,这是未定义的。
- exinstarts引用了一个列表,但是…我希望每对的第一个元素都是开始的,这样[(1,2),(3,4),(5,6)]开始将是1,然后是3和5,而结束将是对中的另一个数字。
- 它被定义为,你可能和我刚开始做的一样,没有滚动查看那条长线的结尾…