我似乎无法弄清楚迭代循环将在我的场景中做我需要的。
我有一个清单:
seqlist1 = ['C', 'G', 'T', 'G', 'T', 'A', 'G', 'A', 'C', 'G', 'T', 'A', 'A', 'A', 'C', 'A', 'T', 'T', 'T', 'A', 'C', 'C', 'T', 'G', 'T', 'T', 'G', 'A', 'T', 'C', 'T', 'G', 'A', 'G', 'T', 'G', 'C', 'T', 'C', 'G', 'G', 'G', 'A', 'A', 'A', 'T', 'T', 'C', 'C', 'T', 'C', 'A', 'G', 'T', 'G', 'A', 'T', 'G', 'C', 'C', 'T', 'T', 'A', 'A', 'C', 'G', 'C', 'T', 'T', 'C', 'C', 'C', 'A', 'T', 'G', 'C', 'C', 'C', 'A', 'G', 'G', 'C', 'A', 'C', 'G', 'A', 'G', 'T', 'A', 'C', 'T', 'C', 'G', 'T', 'T', 'C', 'A', 'C', 'C', 'G', 'T', 'T', 'T', 'T', 'C', 'T', 'C', 'G', 'A', 'C', 'G', 'T', 'A', 'G', 'A', 'A', 'T', 'A', 'A', 'C', 'G', 'C', 'T', 'A', 'C', 'T', 'T', 'C', 'G', 'C', 'A', 'T', 'T', 'G', 'C', 'A', 'G', 'A', 'G', 'T', 'G', 'G', 'C', 'G', 'G', 'A', 'C', 'C', 'C', 'T', 'A', 'A', 'C', 'G', 'G', 'C', 'A', 'G', 'T', 'T', 'C', 'T']
另一个空列表:
seqlist2 = []
我希望能够在seqlist1
列表中逐项检查是否存在特定字母并且如果存在该特定字母,请在空列表中的相同索引处插入补充字母{{1 }}。
到目前为止,我已尝试过以下内容,但我知道这不对:
seqlist2
我在这里做错了什么?
答案 0 :(得分:5)
您的方法是正确的,但您的语法错误。
只需迭代$scope.filter = function() {
$timeout(function() {
$scope.totalItems = $scope.filtered.length;
}, 10);
};
$scope.pageChanged = function (currentPage) {
var start = (currentPage - 1) * $scope.itemsPerPage;
var end = start + $scope.itemsPerPage;
$scope.cats = $scope.allCats.slice(start, end);
};
});
$http.get('json/cats').success(function (result) {
$scope.allCats = result.nodes;
$scope.filter();
});
并使用语法检查每个项目
seqlist1
。然后,使用for item in seqlist1
比较item
是否等于'T'
,'A'
,'G'
或'C'
。
if item == 'A'
(我的目标不是给你花哨的单行代码,而是你可以理解的代码,因为你是初学者)
答案 1 :(得分:4)
因为我不认为有人完全解释了你的错误:
在Python中,您可以编写5 <= x <= 10
,Python可以执行您认为可以执行的操作 - 告诉您x是否介于5和10之间。它与(5 <= x) and (x <= 10)
基本相同。你可以阅读这种比较链here。
现在你写了item in seqlist1 == 'A'
。但in
和==
是比较,您的表达实际上意味着(item in seqlist1) and (seqlist1 == 'A')
。当然上半场永远是真的,下半场永远是假的。 and
然后使整个事情变得虚假。
让我们确认我不会撒谎:-)。在上面的解释之后,应该清楚为什么这是真的:
>>> 'a' in 'bar' == 'bar'
True
应该清楚为什么左侧或右侧部分的括号失败:
>>> ('a' in 'bar') == 'bar'
False
>>> 'a' in ('bar' == 'bar')
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
'a' in ('bar' == 'bar')
TypeError: argument of type 'bool' is not iterable
答案 2 :(得分:3)
使用if item == 'A'
...或者更好的方法可能是使用dict将字母映射到swap:
d = {"A":"T","T":"A","C":"G","G":"C"}
seqlist1 = ['C', 'G', 'T', 'G', 'T', 'A', 'G', 'A', 'C', 'G', 'T', 'A', 'A', 'A', 'C', 'A', 'T', 'T', 'T', 'A', 'C', 'C', 'T', 'G', 'T', 'T', 'G', 'A', 'T', 'C', 'T', 'G', 'A', 'G', 'T', 'G', 'C', 'T', 'C', 'G', 'G', 'G', 'A', 'A', 'A', 'T', 'T', 'C', 'C', 'T', 'C', 'A', 'G', 'T', 'G', 'A', 'T', 'G', 'C', 'C', 'T', 'T', 'A', 'A', 'C', 'G', 'C', 'T', 'T', 'C', 'C', 'C', 'A', 'T', 'G', 'C', 'C', 'C', 'A', 'G', 'G', 'C', 'A', 'C', 'G', 'A', 'G', 'T', 'A', 'C', 'T', 'C', 'G', 'T', 'T', 'C', 'A', 'C', 'C', 'G', 'T', 'T', 'T', 'T', 'C', 'T', 'C', 'G', 'A', 'C', 'G', 'T', 'A', 'G', 'A', 'A', 'T', 'A', 'A', 'C', 'G', 'C', 'T', 'A', 'C', 'T', 'T', 'C', 'G', 'C', 'A', 'T', 'T', 'G', 'C', 'A', 'G', 'A', 'G', 'T', 'G', 'G', 'C', 'G', 'G', 'A', 'C', 'C', 'C', 'T', 'A', 'A', 'C', 'G', 'G', 'C', 'A', 'G', 'T', 'T', 'C', 'T']
# swap A -> T, T -> A ...
print([d[k] for k in seqlist1])
答案 3 :(得分:3)
from string import maketrans
tab = maketrans("ATGC","TACG")
seqlist1 = ['C', 'G', 'T', 'G', 'T', 'A', 'G', 'A', 'C', 'G', 'T', 'A', 'A', 'A', 'C', 'A', 'T', 'T', 'T', 'A', 'C', 'C', 'T', 'G', 'T', 'T', 'G', 'A', 'T', 'C', 'T', 'G', 'A', 'G', 'T', 'G', 'C', 'T', 'C', 'G', 'G', 'G', 'A', 'A', 'A', 'T', 'T', 'C', 'C', 'T', 'C', 'A', 'G', 'T', 'G', 'A', 'T', 'G', 'C', 'C', 'T', 'T', 'A', 'A', 'C', 'G', 'C', 'T', 'T', 'C', 'C', 'C', 'A', 'T', 'G', 'C', 'C', 'C', 'A', 'G', 'G', 'C', 'A', 'C', 'G', 'A', 'G', 'T', 'A', 'C', 'T', 'C', 'G', 'T', 'T', 'C', 'A', 'C', 'C', 'G', 'T', 'T', 'T', 'T', 'C', 'T', 'C', 'G', 'A', 'C', 'G', 'T', 'A', 'G', 'A', 'A', 'T', 'A', 'A', 'C', 'G', 'C', 'T', 'A', 'C', 'T', 'T', 'C', 'G', 'C', 'A', 'T', 'T', 'G', 'C', 'A', 'G', 'A', 'G', 'T', 'G', 'G', 'C', 'G', 'G', 'A', 'C', 'C', 'C', 'T', 'A', 'A', 'C', 'G', 'G', 'C', 'A', 'G', 'T', 'T', 'C', 'T']
seq_str = "".join(seqlist1)
print seq_str.translate(tab)
是一种很好的方法,特别是因为我认为列表最初是字符串形式。
我写了这个,因为它很快,它很好地利用了库内置函数。它也很可读(至少是imho)。我认为这是一个生物信息学课程,你真的只想让倒序列进行一些二次处理。 (如果这实际上是编程作业的介绍,那么你的老师可能不会喜欢这个解决方案)
如果您想拥有(orig,new)
对,可以轻松地将它们拼接在一起
print zip(seq_str,seq_str.translate(tab))
答案 4 :(得分:1)
这应该足够了
seqlist1 = ....
mapping = {'A': 'T', 'T': 'A', 'G': 'C', 'C': 'G'}
seqlist2 = [mapping[item] for item in seqlist1]
答案 5 :(得分:1)
我会在此处采用完全不同的方法,并在致电str.translate
后使用str.join
。
在Python 2.x中:
from string import maketrans
''.join(seqlist1).translate(maketrans('ATCG','TAGC'))
在Python 3.x中:
''.join(seqlist1).translate(str.maketrans('ATCG','TAGC'))
要将结果字符串转换回字符列表,您只需将其作为参数传递给内置列表类型。
>>> list('ATCG')
['A', 'T', 'C', 'G']
答案 6 :(得分:1)
seqlist2 = ['ATCG'['TAGC'.index(c)] for c in seqlist1]
或者:
seqlist2 = map(dict('AT TA CG GC'.split()).get, seqlist1)