打印输出一次后如何打破python综合列表

时间:2017-12-01 07:05:56

标签: python list-comprehension

这是我的代码打印DNA序列的反转,只有字符串

contain character ["A","T","G","C"]

dna=input("Enter DNA sequnce")
[print(dna[::-1]) for x in dna if x in["A","T","G","C"]]

input: ATGC

the output:
CGTA
CGTA
CGTA
CGTA

如何阻止代码循环字符串中出现的字符数。我可以获得一次输出并打破循环吗?

3 个答案:

答案 0 :(得分:2)

基本上你的代码正在检查一个字符,如果它匹配,则反向打印整个列表,尝试使用

dna=input("Enter DNA sequnce")
result=[ x for x in dna if x in["A","T","G","C"]]
print "".join(result[::-1])

如果您不想使用列表推导,那么您也可以使用它

for i in allowed_char:
    if i in dna:
        print dna[::-1]
        break

答案 1 :(得分:2)

您可以尝试:

dna = input("Enter DNA sequnce") 
print(''.join(x for x in dna[::-1] if x in "ATGC"))
# CTGA -> AGTC
# ABCD -> CA

答案 2 :(得分:0)

尝试一些功能性编程技巧怎么样?在这里,我推荐PyFunctional lib来做DNA的事情,因为PyFunctional似乎与处理序列问题一起诞生,希望你能从中受益。

安装功能

pip install PyFunctional

对于您的情况,代码如下:

from functional import seq
from operator import add

data = 'ATGC'

result = (seq(list(data))
          .filter(lambda x: x in {"A", "T", "G", "C"})
          .reduce(add))[::-1]

# CGTA
print(result)

从上面,我们可以看到我们避免使用for循环,并使用函数编程类似过滤器,但我们进一步将该方法组合到一个pipline链中,以避免嵌套的函数方法(类似于map(list(filter) ())))

BTW:在[" A"," T"," G"," C"]中使用x很慢,而是你应该在{" A"," T"," G"," C"}中使用x,它们可以利用哈希集

有关详情,请查看PyPi上的PyFunctional或Github