如何获得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))
答案 0 :(得分:2)
如果您将str
传递给reverse_complementary
,它将会反转并且
翻译字符,这就是你想要的。
如果您传递list
str
个list
个对象,就像您在这里所做的那样,它会
反转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)
<?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.maketrans
和str.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]
是另一种(也是更有效的)反转字符串的方法。