【问题标题】:Iterating a list: getting values as[set(), set(), set(), set(), set()]迭代列表:获取值作为 [set(), set(), set(), set(), set()]
【发布时间】:2022-11-20 23:00:16
【问题描述】:

我有一个列表(df_pop_initial_list),它看起来像这样:

[['000000000000000000000000000001011000000'],
 ['000000001000000000000001000000000010000'],
 ['000000000000000000000000000000010011000'],
 ['000000000000001001000000000000010000000'],
 ['000000000000000000010000001000000010000'],
 ['1000000000100000000010000000000000000000'],
 ['1000000010000000000001000000000000000000'],
 ['1001000000000000000010000000000000000000'],
 ['000000000000100000000000100000000000010'],
 ['000000000110000000000000000000001000000'],
 ['000000101000000010000000000000000000000'],
 ['000000000000001000000010000100000000000'],
 ['000000000000000010000101000000000000000'],
 ['000000001000100000000000000000000100000'],
 ['000000100000000000000000010000001000000'],
 ['000000000000001100000000000010000000000'],
 ['010000000000000000000000000001001000000'],
 ['000000010100000001000000000000000000000'],
 ['000000000000000000001000000001100000000'],
 ['000100000000000100000000000000000000010']]

我正在尝试计算这个 39 bits 字符串列表中的 1,并将每个字符串值转换为 3 个整数,其中位为 on(表示 finding 1's)。

我的代码如下所示:

#Finding locations (3 MSUs) using 39 bit encoded string (counting 1's in a chromosome)
def indices_initial_pop(chromosome):
    return {i+1 for i,c in enumerate(chromosome) if c=='1'}  

#setting dynamic locations according to Chromosomes
def intial_population_bit_to_int(df_pop_initial_list):
    for x in range(0, len(df_pop_initial_list), 1):
        chrome = df_pop_initial_list[x]
        msu_locations = indices_initial_pop(chrome)
        initial_chromosomes_list.append(msu_locations)
        
    return initial_chromosomes_list

initial_chromosomes_in_int_list = intial_population_bit_to_int(df_pop_initial_list)

print (initial_chromosomes_in_int_list)

输出:[set(), set(), set(), set(), set(), set(), set(), set(), set(), set(), set(), set(), set(), set(), set(), set(), set(), set(), set(), set()]

为什么它给我一个 set()?

【问题讨论】:

  • indices_initial_pop 返回集合,因为您要返回集合理解的结果(由于 {})。你想要一个列表理解吗?此外,如果它们都是空的,则表示 if c=='1' 永远不会为真。
  • @Carcigenicate 我想要一个类似这样的列表[{24, 17, 22}, {16, 4, 38}, {25, 13, 38}, {32, 18, 15}]
  • for循环在python中是for..in循环,所以可以直接访问元素你的列表,而不是遍历指数range 中并使用访问元素

标签: python list jupyter-notebook genetic-algorithm genetic-programming


【解决方案1】:

intial_population_bit_to_int 给出了一个集合列表,因为 indices_initial_pop 总是(使用您使用的数据)返回一个空集合。你的实际问题是为什么indices_initial_pop 返回一个空集。答案是因为您在调用中作为参数传递的值,即chrome,是不是一个字符串,但是一个包含单个字符串的列表。您可以使用

chrome = df_pop_initial_list[x][0]

代替

chrome = df_pop_initial_list[x]

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    相关资源
    最近更新 更多