- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
想知道是否有一种方法可以在两个列表上使用 itertools.permutations()
(或其他或类似的东西),并以某种方式链接两个列表的输出,以便存在一对一的它们的输出之间的一种映射。
示例:我有一个字节 x = 0xE3, x_bit = BitArray(x).bin = 11100011
,它是八个信号(比特流)特定顺序的结果 (d0 -d7)
,例如[d0,d3,d4,d7,d2,d1,d6,d5]
。如果我想重新排列信号的顺序,例如get 0xEC = 11101100
由于二进制域的非唯一性,我有几种可能性,但两种可能性是 [d0,d3,d4,d7,d6,d6,d1,d2]
和 [d3,d0,d4,d7,d6,d6,d1,d2]
问题是,是否有一种简单的方法将导致 0xEC
的输出链接到导致 (d0-d7)
的数据信号顺序所需的位序列,例如以一种方式将原始信号顺序“ Hook ”到不同的位,以便我最终得到可能组合的列表,但不会失去二进制排列提供的非唯一性?我首先考虑将信号名称作为字符串附加到位值,但是当然它将是列表中的唯一条目,并且并非所有有效排列都会出现在结果中。
这是我最终将在 5-6 字节的字节数组上使用的东西,因此最终我将不得不保存在数组中的所有字节位置上产生所需输出的所有组合,但由于时间,第一件事。
import itertools
import bitstring
input_byte = 0xE3
input_bitseq = bitstring.BitArray(inpu_byte) # 1110 0011
signal_order = ['d0','d3','d4','d7','d2','d1','d6','d5'] # input signal order
perms = list(itertools.permutations(intput_bitseq))
for x in perms:
print(x)
示例输出:
('1', '1', '1', '0', '0', '0', '1', '0')
('1', '1', '0', '1', '0', '0', '1', '1')
('1', '1', '1', '0', '0', '1', '1', '0')
('1', '1', '0', '0', '1', '1', '0', '1')
('1', '1', '0', '0', '1', '1', '1', '0')
('1', '1', '0', '0', '1', '1', '0', '1')
('1', '1', '0', '0', '1', '0', '1', '1')
('1', '1', '0', '0', '1', '0', '1', '1')
('1', '1', '0', '0', '1', '1', '1', '0')
(列表将有 40k 左右的条目)。现在,只有这些条目的一个子集实际上等于 0xEC,这些当然很容易找到,但我还想知道映射到不同的信号 (d0-d7) 的哪种组合全部匹配 0xEC
的位序列。
额外说明:
Original data:
MSB b7,b6,b5,b4,b3,b2,b1,b0 LSB
0x90 0xE3 0xF5 0xB0 0x9F 0xA2
1001 0000 1110 0011 1111 0101 1011 0000 1001 1111 1010 0010
Switch positions: b1<->b3, b0<->b2
MSB b7,b6,b5,b4,b1,b0,b3,b2 LSB
0x90 0xEC 0xF5 0xB0 0x9F 0xA8
1001 0000 1110 1100 1111 0101 1011 0000 1001 1111 1010 1000
Switch positions: b1<->b0, b3<->b2
MSB b7,b6,b5,b4,b0,b1,b2,b3 LSB
0x90 0xEC 0xFA 0xB0 0x9F 0xA4
1001 0000 1110 1100 1111 1010 1011 0000 1001 1111 1010 0100
Switch positions: b5<->b1
MSB b7,b6,b1,b4,b0,b5,b2,b3 LSB
0x90 0xEC 0xDE 0x94 0xBB 0xA4
1001 0000 1110 1100 1101 1110 1001 0100 1011 1011 1010 0100
Switch positions: b0<->b6
MSB b7,b0,b1,b4,b6,b5,b2,b3 LSB
Final/desired output
0x90 0xEC 0xDE 0x94 0xF3 0xA4
1001 0000 1110 1100 1101 1110 1001 0100 1111 0011 1010 0100
最佳答案
我不能 100% 确定我是否理解您在这里想要做什么。据我了解,您需要源位数组中产生目标位数组的位置的所有排列。
最简单的方法是生成所有排列,然后检查其中哪些排列对应于目标,但这些排列将是 8! = 40k
排列。这并不是很多,但对于较长的序列或经常这样做时可能会出现问题。或者,您可以获取 1 和 0 的所有排列并分配它们以适合您的结果;这些只是 5!*3! = 720
在你的例子中(更平衡==更少/更好)。
类似这样的东西(注意:我只是使用了字符串而不是 BitArray,但这在这里应该不重要)
>>> bits = "11100011"
>>> trgt = "11101100"
>>> ones = [i for i, e in enumerate(bits) if e == "1"]
>>> zeros = [i for i, e in enumerate(bits) if e == "0"]
>>> from itertools import permutations
>>> res = [[next(p1 if b == "1" else p2) for b in trgt] for p1, p2 in
... ((iter(p1), iter(p2)) for p1 in permutations(ones)
... for p2 in permutations(zeros))]
...
>>> res[0]
[0, 1, 2, 3, 6, 7, 4, 5]
>>> len(res)
720
>>> set(''.join(bits[i] for i in l) for l in res)
{'11101100'}
这为您提供了一个字节的解决方案。现在,如果我正确理解了多字节部分,那么您正在寻找可以应用于所有字节的位转置。在这种情况下,解的数量确实会很快变少。您可以使用上述算法获得各个字节的所有解决方案,然后获得 set.intersection
其中(首先将列表转换为元组以使它们可散列),或者获取第一个字节的解决方案(或更好:最“平衡”的一个,开始时具有最少数量的解决方案),然后检查其中哪一个还解决了其他问题。
关于python - python中两个 "linked"列表的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54254304/
我通常从以下位置获取代码:https://www.w3schools.com .这个代码还有一个 Accordion ; 但是,当我使用链接 -> 到 Accordion 时, Accordion 不
我见过的所有 JNI 指南(例如 JNI runtime linking )都建议我将 JNI 库链接到 libjvm.so: $ gcc -I${JAVA_HOME}/include -c -o t
实现以下目标的正确 URL 格式是什么: 使用 Universal Link 在 iOS 上的另一个应用程序中打开 Google map 应用程序。 根据两个坐标设置目的地:纬度和经度,并让用户选择交
我已经查看了 Microsoft 的 MSDN 和整个网络,但我仍然无法很好地了解它是什么。 这是否意味着已完成的程序在执行期间的不同时间加载 DLL,而不是在启动时一次性加载所有 DLL? 我完全偏
我有一个看起来像这样的 css: .browse-link A:link { color: #F6CA4C; text-decoration: none; } .browse-link
当我点击“产品”链接时,它突然指向#link。我怎样才能使它的外观看起来像滚动然后转到产品?请帮帮我。 vStudy function big(x){
我想在保存之前更改从输入字段中获取的值。 params[:link]['url'] = "www.facebook.com/redbull" 现在我只想将“redbull”放入数据库。以下代码失败,因
我正在使用链表编写程序(真是一场噩梦)。 无论如何,该程序的目的是输入 8 个字符,然后让程序将字符打印回给您,并以相反的顺序打印回字符,当然是使用链表。 到目前为止我已经明白了。它有很多错误(我认为
基本上,我删除了 anchor 按钮,因此链接窗口中不应该有指向 anchor 选项的链接。 有什么方法可以删除该下拉选项 ? 最佳答案 想通了 if ( dialogName == 'link' )
我的本地(和远程)SQL SERVER 2005 管理员都声称“允许链接服务器是一个安全问题”并禁止在此处使用它们。 (哈?) 无论如何,有没有办法在没有链接服务器的情况下做类似的事情? SELE
如果我有: linkedlist1= 1,2,3,4; 和 linkedlist2= 5,6,7; 如果我调用: linkedlist2.set(0,9999) 它会更改为 linkedlist2 =
首先,如果这个问题看起来很愚蠢,我很抱歉,但我仍在学习 React 和 html。所以问题是我的 react 代码中有一个按钮标签,它为我提供了一些关于进入我提供的特定链接的逻辑。我的 Button.
我将制作一个文本 block ,这样如果您单击一个单词,它就会被词汇替代品所替换。 例如“fearful-of-cats”是“ailurophobic”的词汇替代品,因为如果您在任何文本中将后者替换为
我有以下代码 Can you click me? 目标是我可以点击“你能点击我吗”框并转到 google 并在包含 div 的任何其他地方
这是一个案例: 默认情况下,如果我点击#2、#3、#4、#5,我将被重定向到#1。 如果我想在没有 #1 激活的情况下点击输入,我该如何修复 CSS? 提前
有没有什么快速的方法可以使 :visited 链接的颜色与链接本身的颜色相同? 例如: * {color:black} a:link {color:blue} a:visited {color:inh
我读到从 iOS 9 开始,引入了通用链接。请解释深层链接和通用链接之间的区别。我的目标是,一个链接将通过邮件发送给客户。让邮件说有一个项目 A 的报价和一个链接。单击链接时 如果安装了该应用程序,则
因此我们需要对 CSS anchor 伪类使用以下顺序 a:link { color: red } a:visited { color: blue } a:hover { color
我组件的当前路径是http://localhost:3000/dashboard/questionnaire/5bf79ff4c45a150015cef7a9在这个组件里面有 Financials 如
我 rsync 目录“Promotion”包含两台具有不同目录结构的机器之间的绝对符号链接(symbolic link)。因此绝对符号链接(symbolic link)在两台机器上都不起作用。为了使它
我是一名优秀的程序员,十分优秀!