为了账号安全,请及时绑定邮箱和手机立即绑定

[python] 根据字典中的信息生成列表,每次都会额外变长。

[python] 根据字典中的信息生成列表,每次都会额外变长。

元芳怎么了 2019-02-18 18:00:36
需求 key_counts中保存了key和value。生成一个列表,根据value的数字,生成value个key。 问题 发现每循环一次,生成的新列表末尾就会多一个空值。 代码 key_counts = [{'key': 'qj', 'value': 3}, {'key': 'wuhan', 'value': 2}, {'key': 'xy', 'value': 2}, {'key': 'zz', 'value': 10}] total = 17 # 上面字段中数值的和,初始化一个同样长度的列表 v1 = ['' for x in range(total)] print(v1) count = 0 for key_count in key_counts: start = count end = start + key_count['value'] - 1 count = end + 1 print(start, end, key_count['key']) xlist = [key_count['key'] for x in range(key_count['value'])] print(xlist) v1[start:end] = xlist print(v1) 输出结果 ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']0 2 qj['qj', 'qj', 'qj']['qj', 'qj', 'qj', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']3 4 wuhan['wuhan', 'wuhan']['qj', 'qj', 'qj', 'wuhan', 'wuhan', '', '', '', '', '', '', '', '', '', '', '', '', '', '']5 6 xy['xy', 'xy']['qj', 'qj', 'qj', 'wuhan', 'wuhan', 'xy', 'xy', '', '', '', '', '', '', '', '', '', '', '', '', '']7 16 zz['zz', 'zz', 'zz', 'zz', 'zz', 'zz', 'zz', 'zz', 'zz', 'zz']['qj', 'qj', 'qj', 'wuhan', 'wuhan', 'xy', 'xy', 'zz', 'zz', 'zz', 'zz', 'zz', 'zz', 'zz', 'zz', 'zz', 'zz', '', '', '', ''] 列表末尾,每循环了一次,都被多增加了一个元素(可能理解错误。)
查看完整描述

2 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

list 切片错误。
应改为:

v1[start:(end+1)] = xlist
查看完整回答
反对 回复 2019-03-01
?
三国纷争

TA贡献1804条经验 获得超7个赞

end = start + key_count['value'] - 1
xlist = [key_count['key'] for x in range(key_count['value'])]
主要问题出在这两句代码上
每次切片的长度,比xlist长度小1
而且Python的切片赋值,并不要求需要长度一致,例如:
L=[1]
L[:1]=[5,5,5]

因为循环中每次的切片赋值时,都使v1的长度增加了1,所以出现了你疑惑的现象

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 567 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信