在列表中存储整数集合

4

我有一个包含RNA碱基字母的列表,还有一个将它们转换为数字值的字典。我想做的是将这些数字值存储到一个新列表中。我已经有:

RNA_list = ['C', 'G', 'A', 'U']
RNA_dictionary = {'A': 1, 'U': 2, 'C': 3, 'G': 4}
for i in RNA_list:
    if i in RNA_dictionary:
        RNA_integers = RNA_dictionary[i]
    else:
        print()

所以RNA_integers是3、4、1、2,但我需要以某种方式将它们存储在列表中。我想做这样的事情:
RNA_integer_list = []
for i in RNA_integers:
    RNA_integer_list = RNA_integer_list + i

但是这样会导致错误,因为for循环无法迭代整数。我是Python的新手,不知道该如何解决。如果有其他人能帮助我,我将不胜感激!


谢谢你的帮助! - kindrex735
你希望使用这个来"翻译"一个序列吗?不清楚为什么RNA_integers = [3,4,1,2]不是最简单的解决方案,除非你要将类似于AAAUUUCCCGGG的序列解析成111222333444...? - beroe
翻译表可能是一个很好的方法来完成这件事。 - kojiro
4个回答

5

您可以进行以下操作

RNA_list = ['C', 'G', 'A', 'U']
RNA_dictionary = {'A': 1, 'U': 2, 'C': 3, 'G': 4}
RNA_integers = []
for i in RNA_list:
    if i in RNA_dictionary:
        RNA_integers.append (RNA_dictionary[i])

print RNA_integers

输出

[3, 4, 1, 2]

或者使用列表推导式

来实现。

RNA_integers = [RNA_dictionary[i] for i in RNA_list if i in RNA_dictionary]

2
还是只需[RNA_dictionary[k] for k in RNA_list] - kojiro
如果k不在RNA_dictionary中怎么办? - thefourtheye
@thefourtheye 在这种情况下,是不是应该让它快速而明显地失败呢? - satoru

3
您可以使用map函数来实现: map(RNA_dictionary.get, RNA_list) 这个函数与上面的代码是等价的。

1
您可以简单地这样做:

RNA_dictionary.values()

获得 [1, 3, 2, 4]

编辑:如果需要保持值的顺序与RNA_list类似,可以使用列表推导式,如 thefourtheye所建议:

RNA_integers = [RNA_dictionary[i] for i in RNA_list if i in RNA_dictionary]

Python字典不以固定的顺序保存其值。 - kojiro
@kojiro,楼主没有提到任何关于顺序的事情。 - dparpyani
OP似乎想将他的RNA碱基字母列表转换为具有整数等效项的列表 - 这意味着保持原始列表的顺序。 - kojiro
@dparpyani 我认为他想保持顺序是一个合理的假设。 - Steinar Lima
@kojiro 好的,没问题。我已经添加了一个编辑来涵盖那种情况。 :) - dparpyani

0

你可以试试这个,

RNA_list = ['C', 'G', 'A', 'U']
RNA_dictionary = {'A': 1, 'U': 2, 'C': 3, 'G': 4}
RNA_integers = []
for i in RNA_list:
    if RNA_dictionary[i]:
        RNA_integers.append (RNA_dictionary[i])

print RNA_integers

输出将会是

[3,4,1,2]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接