Python实现按规则从姓名列表生成拼接新列表的方法
问题根因
你之前的代码思路从一开始就走偏了:全靠固定字符串位置硬切片,完全没考虑每个姓名的实际结构。
- 代码里
string[:3]是切整个字符串的前3个字符,既不是需求要的第一个单词的前4位,长度就对不上 - 后面的
string[7:9]是硬取字符串第7、8位的字符,不管不同姓名的空格位置、单词长度差异,比如john peter的姓从索引5就开始了,切7:9根本取不对姓的内容 - 从头到尾没做“取第二个单词前3位后反转”的操作,自然达不到需求
落地实现逻辑
别写死固定索引,顺着姓名的拆分结构逐元素处理就行,步骤很简单:
- 对每个姓名,按空格拆成名、姓两个独立的单词
- 名的部分直接取前4个字符——Python的切片语法在单词长度不足4的时候会自动取整个单词,不会报错
- 姓的部分先取前3个字符,再做反转
- 把两段拼起来收集成新列表就行
可直接运行的代码实现
基础易读版本(逐行带注释):
x = ["angela lopez", "kimmy kardahshian", "frank moses", "john peter"] result = [] for full_name in x: # 拆分姓名为名、姓两个部分 first_name, last_name = full_name.split() # 提取名的前4位 name_part = first_name[:4] # 提取姓的前3位并反转 surname_part = last_name[:3][::-1] # 拼接后加入结果 result.append(name_part + surname_part) print(result)
运行后输出的最终列表为:
['angepol', 'kimmrak', 'fransom', 'johnetep']
如果追求更简洁的写法,也可以用列表推导式一行实现,逻辑完全一致:
result = [name.split()[0][:4] + name.split()[1][:3][::-1] for name in x]
小技巧:Python里用
[::-1]就可以直接反转字符串,不需要自己写循环遍历倒着拼。
内容的提问来源于stack exchange,提问作者Young Ma
相关产品推荐
相关产品推荐

