python - 重新排列二进制数字
问题描述
假设我有一本从 [0,1...n] 到 [0,1...n] 的字典。我现在想通过根据这本字典移动二进制数字来在 n+1 位数字之间进行转换。如果 n = sum(c_i*2^i),则对于任何值 c_i,f(n,dic) = sum(c_i*2^dic[i])。
例如,假设我的字典是 {0:1,1:2,2:0},那么 5, (101) 将变为 3, (011)。给定一个字典 {0:3,1:2,2:0,3:4,4:1},那么 21, (10101) 将变为 11, (01011)。
我正在尝试以相对较快的方式在 python 中执行此操作。我要对所有 n+1 位数字应用这种转换,所以现在我创建一个数组,其索引是 n+1 位数字的键,但它很慢。
def bit(dic):
out = []
for i in range(2**(len(dic)):
appending = 0
for k in range(len(dic)):
if not i%2**k == i%2**k+1:
appending += 2**dic[k]
out.append(appending)
return out
作为另一个问题,如果多个键可以对应于相同的值 n,根据 dic,我想返回 2^(sum c_keys) if all(sum c_keys < 2) else -1,这似乎很烦人检查一下,有没有聪明的解决方案?
解决方案
推荐阅读
- linux - 如何在不知道 EFI 系统表的情况下找到 MCFG 表?
- java - 在 Java 中使用 Stringbuilder 读取一个巨大的文本文件并附加
- php - Apache 将 REMOTE_USER 转发到 php 以使用 NTLM 进行 SSO
- azure - 如果 Web 应用程序出现故障,Azure Webjobs 会停机吗?
- django - Docker 中的 Django 微服务
- python - 使用 python 的 sklearn 和 matlab 的 pca 的 PCA 的不同结果
- python - Amazon Aurora MySQL:查询期间与 MySQL 服务器的连接丢失
- javascript - React Native Fetch Api 无法设置 Cookie 标头
- python - 这些机器学习输出文件的目的和意义是什么?
- c++ - 使用 OpenCV 旋转最小面积矩形