Python中for循环、if判断与append方法未按预期工作,无法生成有序列表问题求助
Python中for循环、if判断与append方法未按预期工作,无法生成有序列表问题求助
嗨,我来帮你理清楚问题出在哪!你的思路其实是对的——想按数字1、2、3、4的顺序找到对应单词,但代码里counter的更新时机错了,导致每次判断的数字和当前遍历的单词完全不匹配,自然就找不到任何符合条件的元素,sporting列表就空了。
咱们一步步走一遍你的代码执行过程,你就明白了:
- 拆分后的单词列表
y是["is2", "Thi1s", "T4est", "3a"],counter初始为1 - 第一次循环,遍历的单词是
"is2":判断"1"在不在"is2"里?显然不在,所以不添加到sporting。然后不管条件满足与否,你直接执行了counter +=1,counter变成2 - 第二次循环,遍历的单词是
"Thi1s":现在判断的是"2"在不在"Thi1s"里?也不在,counter又变成3 - 第三次循环,遍历的单词是
"T4est":判断"3"在不在里面?还是不在,counter变成4 - 第四次循环,遍历的单词是
"3a":判断"4"在不在里面?依旧不在,counter变成5
整个循环下来,没有一次条件满足,所以sporting当然是空列表啦!
修正后的代码
你需要调整逻辑:对于每个数字(从1到单词的总数),遍历所有单词找到包含该数字的那一个,找到后添加到列表里。修改后的代码如下:
def order(sentence): y = sentence.split() # split()本身就返回列表,不用额外转list sporting = [] # 单词的数量就是我们要找的最大数字,循环从1到len(y) for counter in range(1, len(y)+1): for word in y: if str(counter) in word: sporting.append(word) break # 找到对应单词就跳出内层循环,不用继续找了 print(sporting) return sporting order("is2 Thi1s T4est 3a")
执行这个函数,就能得到你想要的["Thi1s", "is2", "3a", "T4est"]啦!
更简洁的写法(进阶小技巧)
如果你想让代码更简洁,可以利用Python的排序功能,自定义排序规则——提取每个单词里的数字,按数字大小排序:
def order(sentence): # 提取单词中的数字作为排序键 def get_number(word): for char in word: if char.isdigit(): return int(char) return sorted(sentence.split(), key=get_number) print(order("is2 Thi1s T4est 3a")) # 输出: ['Thi1s', 'is2', '3a', 'T4est']
这个方法更灵活,哪怕单词里的数字位置不固定也能正常工作~
备注:内容来源于stack exchange,提问作者Imran Hussain
相关产品推荐
相关产品推荐

