如何reverse_complementary列表中的几个字符串

时间:2017-02-18 16:16:04

标签: python python-3.x

如何获得dna的互补反向?下面的公式适用于第一个字符串,但是当我在列表中添加第二个字符串时,它不起作用。

dna = ['CAG', 'AGT']

def reverse_complementary (char):
    my_dictionary = {"A": "T", "C": "G", "G": "C", "T": "A"} 
    return "".join([my_dictionary[i] for i in reversed(char)])

print("reverse_complementary =" , reverse_complementary(dna))

2 个答案:

答案 0 :(得分:2)

如果您将str传递给reverse_complementary,它将会反转并且 翻译字符,这就是你想要的。

如果您传递list strlist个对象,就像您在这里所做的那样,它会 反转str,然后尝试在dict中查找每个reverse_complementary,然后 那会失败。

如何解决?这取决于你是否想传递单个DNA 序列或列表。前者似乎更通用,所以我会去 那个。

dna = ['CAG', 'AGT'] for s in dna: print("reverse_complementary =" , reverse_complementary(s)) 已经可以使用字符串,因此不会改变。 我们需要区别对待它:

lst = []
for s in dna:
    lst.append(reverse_complementary(s))
print("reverse_complementary =" , lst)

编辑:如何以列表形式打印结果。

循环:

lst = [reverse_complementary(s) for s in dna]
print("reverse_complementary =" , lst)

使用list comprehension

<?php

Header('Content-Type: application/json; charset=UTF-8');

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

$app = new \Slim\App;

$app->get('/api/standings', function(Request $request, Response $response){
    $sql = "SELECT * FROM standings";

    try {
        $db = new db();
        $db = $db->connect();

        $stmt = $db->query($sql);
        $standings = $stmt->fetchAll(PDO::FETCH_OBJ);
        $db = null;

        $json = json_encode($standings, JSON_UNESCAPED_UNICODE);
        echo $json;

    } catch(PDOException $e) {
        echo '{"error": {"text": '.$e->getMessage().'}';
    }
});

答案 1 :(得分:0)

你需要在每个字符串上单独执行翻译(而不是列表本身),这可以通过循环或map或明确的列表理解来完成,例如:

def reverse_complementary(char):
    my_dictionary = {"A": "T", "C": "G", "G": "C", "T": "A"} 
    return ["".join([my_dictionary[i] for i in reversed(seq)]) for seq in char]

但是,当您想要将字符映射到其他字符时,通常最好使用str.maketransstr.translate

to_complement = str.maketrans({"A": "T", "C": "G", "G": "C", "T": "A"})

def reverse_complementary(char):
    return [seq[::-1].translate(to_complement) for seq in char]

[::-1]是另一种(也是更有效的)反转字符串的方法。