Python中zip函数参数含义及列表索引报错问题咨询
列表拼接问题解答
1. 列表推导式里的i、j和zip的作用
先看这段能生成目标列表的代码:
list1 = ["M", "na", "i", "Ke"] list2 = ["y", "me", "s", "lly"] list3 = [i + j for i, j in zip(list1, list2)] print(list3)
拆解关键部分:
zip(list1, list2):把两个列表对应位置的元素两两打包成元组,会生成("M", "y")、("na", "me")、("i", "s")、("Ke", "lly")这四个元组。i, j in zip(...):每次循环从zip生成的元组里取出两个元素,i是list1当前位置的元素,j是list2对应位置的元素。i + j:把这两个字符串拼接,比如"M"+"y"得到"My",所有拼接结果会被自动收集成新列表list3,最终就是["My", "name", "is", "Kelly"]。
2. 报错原因与解决方法
你写的for循环报错TypeError: list indices must be integers or slices, not str,问题出在:for item in list1循环时,item是list1里的字符串(比如第一个循环item是"M"),而列表的索引必须是整数(比如0、1),用字符串"M"去取list1[item]自然会报错。
这里给两种正确的for循环写法:
方法一:通过索引遍历
list1 = ["M", "na", "i", "Ke"] list2 = ["y", "me", "s", "lly"] list3 = [] # 遍历0到3的索引值 for idx in range(len(list1)): combined_str = list1[idx] + list2[idx] list3.append(combined_str) print(list3)
方法二:用zip遍历(和列表推导式逻辑一致)
list1 = ["M", "na", "i", "Ke"] list2 = ["y", "me", "s", "lly"] list3 = [] # 直接取对应位置的两个元素 for i, j in zip(list1, list2): list3.append(i + j) print(list3)
内容的提问来源于stack exchange,提问作者Nick Jojo
相关产品推荐
相关产品推荐

