TypeError:只能将iterable-值赋给lis

2024-05-15 23:15:28 发布

您现在位置:Python中文网/ 问答频道 /正文

您能建议一种方法,将变量的值应用到从元素6到变量定义的结束的列表中吗?

也许我的代码能更好地解释它(Python3)

#get user input as to size of range
range_size = 0
if range_size == 0:
    try:
        range_size = int(input('Size of Range?: '))
    except ValueError:
        print('That was not an integer!')
        range_size = 0

#set base value for each number in range_size
base_value = int(100 / range_size)

print(base_value)

#create list of base values
num_weighted = [base_value] * range_size
num_weighted[0] = round(base_value * 1.8, 1)
num_weighted[1] = round(base_value * 1.6, 1)
num_weighted[2] = round(base_value * 1.5, 1)
num_weighted[3] = round(base_value * 1.3, 1)
num_weighted[4] = round(base_value * 1.15, 1)
num_weighted[5] = round(base_value * 1.1, 1)

print(num_weighted)
# redistribute the difference of the sum top 6 and 100, apply to rest of range
top6 = (sum(num_weighted[0:6]))
not_top6 = range_size - 6
pts_alloc = round((100 - top6) / not_top6, 1)
print(pts_alloc)

#attempt 1
num_weighted[6:] = pts_alloc

#attempt 2
#num_weighted[6:(range_size + 1)] = pts_alloc

#attempt 3
#s = slice(6, not_top6)
#num_weighted[s] = pts_alloc

Tags: ofinputbasesizevaluenotrangenum
2条回答

使用list.append()

num_weighted.append(pts_alloc)

只能将iterable赋给一个切片;具有0个或多个值的内容,而不是一个特定值。

我不会预先建立列表然后替换所有内容;只要:

num_weighted = [
    round(base_value * 1.8, 1)
    round(base_value * 1.6, 1)
    round(base_value * 1.5, 1)
    round(base_value * 1.3, 1)
    round(base_value * 1.15, 1)
    round(base_value * 1.1, 1)
]

并使用带生成器的list.extend()使用pts_alloc扩展列表:

num_weighted.extend(pts_alloc for _ in range(range_size - 6)) 

现在你有一个长度列表range_size

您可以创建一个pts_alloc列表并将其分配给切片,如下所示

num_weighted[6:] = [pts_alloc for i in range(len(num_weighted) - 6)]

相关问题 更多 >