0

我有一个程序,它接受一个字符串并将其转换为如下所示的列表 - ['CTTC', 'CGCT', 'TTTA', 'CATG']。(它实际上比这长得多)。现在我需要找出这些列表元素中有多少是C or A or T or G第一个字母。这需要从终端获取,即使用该input功能。

现在据我所知,在 python 3.2 中,输入函数的数据类型默认为字符串 ( str) 而不是整数 ( int)(可以通过 using 看到isinstance)。但是,由于我使用的是大学服务器,python 版本较旧(我认为 2.7 或更高版本但低于 3.0)。在这种情况下,当我使用输入功能要求用户选择一个 initial = input("Choose a letter:")字母时,当我输入任何字母(A、T、G 或 C)时,它会给我一个错误NameError: name 'C' is not defined。当我使用 . 检查数据类型时isinstance,我意识到 python 版本将输入的数据类型作为int. 当我尝试将其转换为字符串时,它会给出相同的错误。是版本的问题还是我做错了什么。我的代码如下。

import sys
#import random

file = open(sys.argv[1], 'r')
string = ''
for line in file:
    if line.startswith(">"):
        pass
    else:
        string = string + line.strip()


w = input("Please enter window size:")
test = [string[i:i+w] for i in range (0,len(string),w)]
#seq = input("Please enter the number of sequences you wish to read:")
#first = random.sample((test), seq)
print test
l = input("Enter letter for which you wish to find the probability:")
lin = str(l)
print lin
4

1 回答 1

1

使用raw_input,不使用input。在 Python 2.x 中,input需要有效的 Python 代码,其中 asraw_input会将输入转换为字符串。在 Python 3.xinput中的工作方式与raw_input.

要解决您的实际问题,即计算首字母的数量,您可以使用 adefaultdict或 a CounterCounter仅当您的 Python 版本为 2.7 及更高版本时才可用。defaultdict在 2.5 中添加。

>>> from collections import Counter
>>> i = ['CTTC','CGCT','TTTA','CATG','ABCD']
>>> c = Counter(x[0] for x in i)
>>> c['C']
3

这是defaultdict方法:

>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for x in i:
...    d[x[0]] += 1
...
>>> d['C']
3
于 2013-02-11T04:14:09.087 回答