Python - 制作计数器,制作循环?

标签 python loops counter

我在处理下面的一段代码时遇到了一些问题:

输入:li 是一个嵌套列表,如下所示:

li = [['>0123456789 mouse gene 1\n', 'ATGTTGGGTT/CTTAGTTG\n', 'ATGGGGTTCCT/A\n'],   ['>9876543210 mouse gene 2\n', 'ATTTGGTTTCCT\n', 'ATTCAATTTTAAGGGGGGGG\n']]

使用下面的函数,我想要的输出只是'>'之后的第2到第9位数字,条件是整个子列表中'/'的数量> 1。

相反,我的代码为所有条目提供了数字。此外,它给了他们多次。因此,我假设我的计数器和 for 循环有问题。我不太明白这一点。

任何帮助,不胜感激。

import os

cwd = os.getcwd()


def func_one():
    outp = open('something.txt', 'w')       #output file
    li = []
    for i in os.listdir(cwd):           
        if i.endswith('.ext'):
            inp = open(i, 'r').readlines()
            li.append(inp)
    count = 0
    lis = []
    for i in li:
        for j in i:
            for k in j[1:]          #ignore first entry in sublist
                if k == '/':
                    count += 1
                if count > 1:
                    lis.append(i[0][1:10])      
                    next_func(lis, outp)

谢谢, 小号:-)

最佳答案

您的缩进可能有误,您应该在 for j in i 循环中检查 count > 1,而不是在检查 中每个字符的循环中j[1:].

另外,这里有一个更简单的方法来做同样的事情:

def count_slashes(items):
    return sum(item.count('/') for item in items)

for item in li:
    if count_slashes(item[1:]) > 1:
        print item[0][1:10]

或者,如果您需要列表中的 ID:

result = [item[0][1:10] for item in li if count_slashes(item[1:]) > 1]

python list comprehensionsgenerator expressions是非常强大的工具,尝试学习如何使用它们,因为它可以让您的生活变得更加简单。上面的 count_slashes 函数使用了一个生成器表达式,而我的最后一个代码片段使用了一个列表理解来以一种简洁明了的方式构造结果列表。

关于Python - 制作计数器,制作循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973926/

相关文章:

python - 为什么我的 "if"语句在使用 "break"函数时没有退出?

带有for循环的Java搜索数组找不到所有结果

sql - 这是一个低效编写的嵌套游标。您能否用更有效的查询替换它并解释我的问题是什么?

python - 使用键盘输入制作基本的Python计数器

c - C语言如何在不停止程序的情况下使用scanf?

python picamera,键盘 ctrl+c/sigint 未捕获

python - 如何更快地计算给定节点的最短路径长度?

python multiprocessing pool.map 不阻塞?

python - 如何检查opencv python中的cv2.circle是否位于cv2.rectangle内

ruby-on-rails - 在 Rails 中创建一个简单的计数器