【问题标题】:Generate a list with a for-loop使用 for 循环生成列表
【发布时间】:2013-12-16 06:44:58
【问题描述】:

一个人有 22 条染色体和 2 条性染色体 X 和 Y。

我想从 'chr1'、'chr2'、'chr3' ... 'chr22'、'chrX' 和 'chrY' 生成这些染色体名称,只输入染色体数和 X 和 Y。

# Input the data here
number_of_chr = 22,'X','Y'

for x in range(number_of_chr[0]):
    print('chr'+str(x+1))

从代码中我可以生成 'chr1' 到 'chr22',但是如何生成 'chrX' 和 chrY' 并将它们附加到一个列表中,这样最终的结果是这样的:

chrID  = ['chr1','chr2','chr3',......'chr19','chr20','chr21','chr22','chrX','chrY']

【问题讨论】:

    标签: python list for-loop python-3.x


    【解决方案1】:
    chrID = [ 'chr{}'.format(x) for x in list(range(1,23)) + ['X', 'Y'] ]
    

    【讨论】:

    • 这个简单的代码真的很棒!但我需要先获取输入值。谢谢。
    【解决方案2】:

    使用append 追加到列表

    r = list(range(1,23))
    r.append('X')
    r.append('Y')
    l = []
    
    for x in r:
        l.append('chr'+str(x))
    

    range 返回范围内的数字列表(在 python2.7 中)。只需将 x 和 y 附加到该列表即可。 我猜您使用的是 python 3,因此您必须将范围转换为如上所示的列表。

    【讨论】:

    • 谢谢@rjv。是的,我使用的是 pyhon 3,但它得到了TypeError: Can't convert 'int' object to str implicitly。如果我打印 'l' 它只有 'chr1' 到 'chr22' 没有 X 和 Y。如果我运行代码,x 是 X 和 Y 应该加 1 吗?
    • 是的,那是因为你在 1 中添加了 'X'。我已经修复了它
    【解决方案3】:
    >>> from itertools import chain
    >>> number_of_chr = 22,'X','Y'
    >>> n, *rest = number_of_chr
    >>> ['chr%s'%i for i in chain(range(1, n+1), rest)]
    ['chr1', 'chr2', 'chr3', 'chr4', 'chr5', 'chr6', 'chr7', 'chr8', 'chr9', 'chr10', 'chr11', 'chr12', 'chr13', 'chr14', 'chr15', 'chr16', 'chr17', 'chr18', 'chr19', 'chr20', 'chr21', 'chr22', 'chrX', 'chrY']
    

    【讨论】:

    • 这是我想要的,因为输入。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2021-11-07
    • 2021-11-16
    • 2012-01-21
    • 1970-01-01
    相关资源
    最近更新 更多