为什么这个不行?''.join(' '.join(string).split().remove(str[n]))

1 投票
3 回答
767 浏览
提问于 2025-04-17 04:56

我在玩 codingbat.com 的时候,发现了一个很简单的问题可以解决,所以我开始尝试写一些新手级别的代码。

题目是这样的:给你一个非空的字符串和一个整数 n,返回一个新的字符串,这个新字符串是把原字符串中索引为 n 的字符去掉后的结果。n 的值一定是原字符串中字符的有效索引(也就是说,n 的范围是从 0 到 字符串长度减 1)。

比如:
missing_char('kitten', 1) → 'ktten'
missing_char('kitten', 0) → 'itten'
missing_char('kitten', 4) → 'kittn'

代码如下:

def missing_char(str, n):
  return ''.join(' '.join(str).split().remove(str[n]))

奇怪的是,Python 不会执行这个代码。
这是为什么呢?

3 个回答

2

简化版

missing_char=lambda s,n:s[:n]+s[n+1:]
9

这不是直接回答你问题的内容,但看起来你这样做切片的方法有点复杂...

def missing_char(s, n):
    return s[:n] + s[n+1:]
13

这是因为 remove 这个函数执行后会返回 None。在 Python 中,大多数(可能是所有)内置的会改变值的函数,最后都会返回 None

所以你外面的 join 函数其实是在尝试把“什么都没有”的东西连接在一起。

撰写回答