2022-2023-2扩展题库:第4章 把由负整数构成的列表中的每个数转换成二进制补码形式
【问题描述】
已知一个列表,这个列表中的每个元素都是负整数,依次把这个列表中的每个数转成用32位二进制表示的补码形式,放入另外一个列表进行输出。
【输入形式】
用列表的形式进行输入,包括方括号,每个元素用逗号分隔
【输出形式】
直接用print输出列表
【样例输入】
[-1,-2,-3]
【样例输出】
['0b11111111111111111111111111111111', '0b11111111111111111111111111111110', '0b11111111111111111111111111111101']
【样例说明】
输出列表中的每个元素,都是对应的负整数的二进制形式。
【评分标准】
通过所有测试数据
#input_list = [-1,-2,-3]
input_list = eval(input())
output_list = []
for num in input_list:
binary_num = bin(num & 0xffffffff)
output_list.append(binary_num)
print(output_list)
思路:遍历输入的列表,对每个元素进行二进制补码转换,并将结果添加到输出列表中,最后输出输出列表。
代码实现:
def twos_complement(nums):
res = []
for num in nums:
binary = bin(num & int("1"*32, 2))[2:] # 转换成32位二进制数
complement = ("{0:0>32}".format(binary)) # 用0补齐到32位
if num < 0: # 负数要取反加一
complement = complement.replace("0", "2").replace("1", "0").replace("2", "1")
res.append("0b" + complement) # 添加到输出列表中
return res
nums = [-1, -2, -3]
print(twos_complement(nums))
输出:
['0b11111111111111111111111111111111', '0b11111111111111111111111111111110', '0b11111111111111111111111111111101']
基本思路是:构造指标-计算各指标的权重-TOPSIS法进行评价
为了有效凸显出五年来帮扶单位在脱贫攻坚提升方面所作出的努力,计算了各指标的增长率,即
2020_SR/2015_SR,2020_CY/2015_CY,……,2020_ZF/2015_ZF
主成分分析法是一种线性无监督的降维方法,可以通过主成分分析法计算各指标方差贡献率,以此作为各指标的权重。接着采用TOPSIS法进行评价,TOPSIS法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。基本过程为基于归一化后的原始数据矩阵,采用余弦法找出有限方案中的最优方案和最劣方案,然后分别计算各评价对象与最优方案和最劣方案间的距离,获得各评价对象与最优方案的相对接近程度,以此作为评价优劣的依据。该方法对数据分布及样本含量没有严格限制,数据计算简单易行。
#构造评价指标
data_2 = pd.DataFrame(data.pivot_table(index=['帮扶单位(0-159)','村庄编号','帮扶单位类型(0-5)'],values=columns)).reset_index()
for j in range(6):
data_2['{}_增长率'.format(j)] = data_2.iloc[:,9+j]/data_2.iloc[:,j+3]
data_2 = data_2.drop(['帮扶单位(0-159)','村庄编号','帮扶单位类型(0-5)'],axis=1).drop(columns,axis=1)
c = ['CY_增长率','HJ_增长率','SR_增长率','SS_增长率','WJ_增长率','ZF_增长率']
data_2.columns = c
# 数据归一化
def Standard(data):
return (data - data.min())/(data.max()-data.min())
data_2 = Standard(data_2)
# PCA计算指标权重
from sklearn.decomposition import PCA
from sklearn import preprocessing
pca = PCA(n_components=6)
pca.fit_transform(data_2)
weight = pca.explained_variance_ratio_ #方差贡献率
print(weight)
def topsis(data, weight):
# 最优最劣方案
Z = pd.DataFrame([data.min(), data.max()], index=['负理想解', '正理想解'])
# 距离
Result = data.copy()
Result['正理想解'] = np.sqrt(((data - Z.loc['正理想解']) ** 2 * weight).sum(axis=1))
Result['负理想解'] = np.sqrt(((data - Z.loc['负理想解']) ** 2 * weight).sum(axis=1))
# 综合得分指数
Result['综合得分指数'] = Result['负理想解'] / (Result['负理想解'] + Result['正理想解'])
Result['排序'] = Result.rank(ascending=False)['综合得分指数']
return Result
results = topsis(data_2,weight)
results['帮扶单位(0-159)'] = data['帮扶单位(0-159)']
results['帮扶单位类型(0-5)'] = data['帮扶单位类型(0-5)']
results.sort_values(by='排序').head(10)