遍历列表返回全空set()问题:39位字符串1的位置提取失败
提取二进制字符串'1'位位置全为空集合的原因及解决
以下是几种最可能的原因:
二进制字符串存在隐藏格式问题
如果你的二进制字符串里包含空格、换行符或其他不可见字符,比如字符串是" 1001..."或者"1\n0\n1...",直接判断char == '1'会匹配失败。可以用repr()查看字符串的真实内容,比如执行print(repr(df_pop_initial_list[0])),确认是否有额外字符。嵌套结构未正确解析
你提到元素是嵌套的二进制字符串,比如每个列表元素是["1100..."]这类嵌套列表/元组。如果代码直接对嵌套结构遍历字符,相当于遍历的是嵌套容器的元素,而非二进制字符串的字符,自然找不到'1'。这种情况需要先取出嵌套里的字符串,比如s = nested_element[0]再处理。逻辑判断或循环范围错误
比如循环条件写漏了字符(如range(len(s)-1)跳过最后一位)、判断条件写反成char == '0',或者索引计数逻辑错误(比如误从非0起点遍历),都会导致无法匹配到'1'的位置。字符串本身无'1'或为空
如果所有二进制字符串全是'0'或者是空字符串,结果自然是空集合。可以先打印几个元素确认:print(df_pop_initial_list[:3])。
参考正确实现示例
如果元素是直接的二进制字符串:
result = [] for binary_str in df_pop_initial_list: ones_positions = set() # enumerate默认从0开始计数,需要从1开始的话用idx+1 for idx, char in enumerate(binary_str): if char == '1': ones_positions.add(idx) result.append(ones_positions)
如果是嵌套结构(比如每个元素是包含字符串的列表):
result = [] for nested_item in df_pop_initial_list: binary_str = nested_item[0] # 取出嵌套中的字符串 ones_positions = set() for idx, char in enumerate(binary_str): if char == '1': ones_positions.add(idx) result.append(ones_positions)
内容的提问来源于stack exchange,提问作者user13373167
相关产品推荐
相关产品推荐

