【问题标题】:Quick basic loop快速基本循环
【发布时间】:2012-04-27 23:59:25
【问题描述】:

我在一个文件中有以下几行。这是一行的示例:

近乎_???? chr12 - 10 110 10 110 3 10,50,100, 20,60,110,

我有以下代码来获取信息:

fp = open(infile, 'r')
for line in fp:
     tokens = line.split()
     exonstarts = tokens[8][:-1].split(',')
     exonends = tokens[9][:-1].split(',')

这会给我一个像这样的列表:

exonstarts = [10,50,100]
exonends = [20,60,110]

这有 3 个外显子(尽管文件中的其他行可能多于或少于 3 个,所以这必须适用于任意数量的外显子),它们来自:

 10-20
 50-60
 100-110

因此,对于开始列表中的每个数字,在完成列表中都有一个。 这意味着第一个密码子从 exonstarts[0] 开始并在 exonends[0]。第二个从 exonstarts[1] 开始,在 exonends[1] 结束。 以此类推。

如何编写此代码的其余部分,以便将元素配对?


更新:

来自:

tokens = line.split()
exonstarts = tokens[8][:-1].split(',')
exonends = tokens[9][:-1].split(',')
zipped = list(zip(exonstarts, exonends))

我还有一个问题,我想要这些东西。所以例如,我想要chr_string[10:20]+chr_string[50:60]+chr_string[100:110] 有什么方法可以让我轻松地说出这个吗??

【问题讨论】:

  • 很抱歉这个菜鸟编程问题。我真的需要一些帮助来解决我遇到的时间紧迫问题
  • 无需向帕特里克道歉,这就是该网站的目的:)
  • @PatrickCampbell:一般来说,您最好打开一个新问题来进行类似的跟进。
  • 关于您的第二个问题:尝试运行该代码。它应该可以工作。
  • 哦,我知道它会起作用,但考虑到我会有一个可变的数字和长度列表,我不能简单地写出来。我需要某种变量或包含在其中的东西

标签: python loops for-loop


【解决方案1】:

zip 内置是您所寻找的:

>>> exonstarts = [10,50,100]
>>> exonends = [20,60,110]
>>> zip(exonstarts,exonends)
[(10, 20), (50, 60), (100, 110)]

【讨论】:

    【解决方案2】:

    我相信你想要zip 函数。

    In [1]: exonstarts = [10,50,100]
    
    In [2]: exonends = [20,60,110]
    
    In [3]: zip(exonstarts, exonends)
    Out[3]: [(10, 20), (50, 60), (100, 110)]
    

    【讨论】:

    • 是否内置了zip功能?因为当我尝试 zip(exonstarts, exonends) 时,我得到的只是
    • zip 函数是内置的,除非你重写它。它是在 2.0 版中添加的
    • 在python3中,我相信它会返回一个迭代器。试试list(zip(exonstarts, exonends))
    • zip() 在 Python 3 中返回一个对象。尝试list(zip(exonstarts, exonends)) 查看内容。
    • 就是这样!谢谢!这么多!!
    【解决方案3】:

    您可以使用zip() 获得这些对:

    >>> for t in zip(exonstarts, exonends):
    ...     print('%d-%d' % t)
    ... 
    10-20
    50-60
    100-110
    

    使用这些对通过切片chr_string(我已经制作)获得list

    >>> [chr_string[start:end] for start,end in zip(exonstarts, exonends)]
    ['0506070809', '2526272829', '5051525354']
    

    将这些结合在一起:

    >>> ''.join(chr_string[start:end] for start,end in zip(exonstarts, exonends))
    '050607080925262728295051525354'
    

    【讨论】:

    • 所以,另一个问题,我有一个我想要这些碎片的刺痛。所以举个例子,我想要 chr_string[10:20]+chr_string[50:60]+chr_string[100:110] 有没有办法可以轻松地说出这个??
    • @PatrickCampbell:如果您解释了您要解决的实际 问题,将会有所帮助。另见:meta.stackexchange.com/questions/66377/what-is-the-xy-problem
    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 2014-11-28
    • 2020-02-17
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2015-02-23
    相关资源
    最近更新 更多