在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python/ [python] 根據(jù)字典中的信息生成列表,每次都會(huì)額外變長(zhǎng)。

[python] 根據(jù)字典中的信息生成列表,每次都會(huì)額外變長(zhǎng)。

需求

key_counts中保存了key和value。生成一個(gè)列表,根據(jù)value的數(shù)字,生成value個(gè)key。

問(wèn)題

發(fā)現(xiàn)每循環(huán)一次,生成的新列表末尾就會(huì)多一個(gè)空值。

代碼

key_counts = [{'key': 'qj', 'value': 3}, {'key': 'wuhan', 'value': 2}, {'key': 'xy', 'value': 2}, {'key': 'zz', 'value': 10}]
total = 17 # 上面字段中數(shù)值的和,初始化一個(gè)同樣長(zhǎng)度的列表

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)

輸出結(jié)果

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

列表末尾,每循環(huán)了一次,都被多增加了一個(gè)元素(可能理解錯(cuò)誤。)

回答
編輯回答
病癮

end = start + key_count['value'] - 1
xlist = [key_count['key'] for x in range(key_count['value'])]
主要問(wèn)題出在這兩句代碼上
每次切片的長(zhǎng)度,比xlist長(zhǎng)度小1
而且Python的切片賦值,并不要求需要長(zhǎng)度一致,例如:
L=[1]
L[:1]=[5,5,5]

因?yàn)檠h(huán)中每次的切片賦值時(shí),都使v1的長(zhǎng)度增加了1,所以出現(xiàn)了你疑惑的現(xiàn)象

2017年1月8日 08:43
編輯回答
呆萌傻

list 切片錯(cuò)誤。
應(yīng)改為:

v1[start:(end+1)] = xlist
2018年3月4日 00:02