0

我正在尝试遍历一个列表,但是除非我指定要遍历列表的哪个部分,否则它不起作用(我希望它遍历整个列表而不仅仅是一个部分,例如 list1[1] 等。

input1 = input("Corrupted: ")
words = input1.split()
a = 0
final1 = ""
for i in words[a]:
  a = a + 1
  if i in "ATGC":
    final1 = final1 + i
print(final1)

当我运行它时,它什么也没打印出来。但是,如果我将“a”更改为硬编码 0,它只会打印出 words[0] 的正确输入。我不明白,因为我将 a 分配给 0,并且每次将其递增 1。它仍然没有打印任何东西!

4

2 回答 2

2

您可以直接遍历列表:

for i in words:
    if i in "ATGC":
        final1 = final1 + i
print(final1)

有更简单的方法来写这个,比如列表推导:

final1 = [i for i in words if i in "ATGC"]

或者为了使用冻结集获得更好的性能,如果您在输入中一次处理单个字母:

acids = frozenset(('A', 'T', 'G', 'C'))
final1 = [i for i in words if i in acids]

其中任何一个都将返回字符串列表 - 要获取单个字符串,请使用join

print (''.join(final1))
于 2013-09-07T03:58:19.710 回答
0

for i in words[a]不做你认为它做的事。a = 0,将words[a]始终为长度 1,第 0 个元素。所以,你的循环只会运行一次。

而是直接迭代列表:

for i in words:
    if i in "ATGC":
        final1 = final1 + i
于 2013-09-07T04:01:11.537 回答