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

新手上路,请多包涵

需求

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', '', '', '', '']

列表末尾,每循环了一次,都被多增加了一个元素(可能理解错误。)

阅读 1.5k
2 个回答
✓ 已被采纳新手上路,请多包涵

list 切片错误。
应改为:

v1[start:(end+1)] = xlist

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,所以出现了你疑惑的现象

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题