![](/img/trans.png)
[英]How to create a 2D list in python based on values in another 2D list
[英]How to create a 2D List in Python Based on Certain Values in a list
我有以下值的列表:
numbers = [127, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 2, 10, 127, 0, 1, 1, 1, 2, 10, 127, 0, 1, 1, 1, 2, 10, 127, 0, 1, 1, 1, 2, 10, 127, 0, 1, 1, 1, 2, 10, 6, 1, 127, 0, 1, 1, 1, 2, 10, 6, 1, 127]
这些都是指微控制器引脚的“功能”,基本上是“模式”可用的。 结构的工作方式是第一个数字是模式,第二个数字是分辨率,当返回127
时,意味着该引脚的所有模式都耗尽。 所以,例如,
此列表中的第三个引脚支持模式0, 1, 4
分辨率为1, 1, 14
。 类似地,前两个引脚不支持模式(这就是为什么有两个连续的127
秒)。
我的问题是,如何为所有引脚及其支持的模式制作2D列表? 如何遍历该数字列表,每次达到127
时添加新列表? 这是我到目前为止:
pins = []
supported_modes = [] # Temporary list to hold values
for i in range(0, len(numbers)):
if numbers[i] == 127:
pins.append(supported_modes) # Append to pin list
del supported_modes[:]
return
supported_modes.append(numbers[i])
但是,这有各种各样的问题。 主要认为每次都删除supported_modes
。 理想情况下,此列表(如果仅填充前三个引脚)将如下所示:
pins = [ [], [], [0, 1, 1, 1, 4, 14] etc. ]
谢谢
pins = []
supported_modes = []
for number in numbers:
if number == 127:
pins.append(supported_modes)
supported_modes = []
else:
supported_modes.append(number)
你有几个问题: return
应该是continue
,但我更喜欢else
,和del
因为你说的打掉是不存在有用supported_modes
你插入即使它,因为在Python中的一切,都由参考。
numbers = [127, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 2, 10, 127, 0, 1, 1, 1, 2, 10, 127, 0, 1, 1, 1, 2, 10, 127, 0, 1, 1, 1, 2, 10, 127, 0, 1, 1, 1, 2, 10, 6, 1, 127, 0, 1, 1, 1, 2, 10, 6, 1, 127]
answer = []
temp = []
for num in numbers:
if num==127:
answer.append(temp)
temp = []
else:
temp.append(num)
if temp:
answer.append(temp)
输出:
In [51]: answer
Out[51]:
[[],
[],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 2, 10],
[0, 1, 1, 1, 2, 10],
[0, 1, 1, 1, 2, 10],
[0, 1, 1, 1, 2, 10],
[0, 1, 1, 1, 2, 10, 6, 1],
[0, 1, 1, 1, 2, 10, 6, 1]]
还有一个使用itertools
的解决方案:
import itertools
answer = []
while numbers:
temp = list(itertools.takewhile(lambda n: n!=127, numbers))
numbers = numbers[len(temp)+1 :]
answer.append(temp)
输出:
In [79]: answer
Out[79]:
[[],
[],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 2, 10],
[0, 1, 1, 1, 2, 10],
[0, 1, 1, 1, 2, 10],
[0, 1, 1, 1, 2, 10],
[0, 1, 1, 1, 2, 10, 6, 1],
[0, 1, 1, 1, 2, 10, 6, 1]] # note the missing empty list at the end
numbers = [127, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 3, 8, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 4, 14, 127, 0, 1, 1, 1, 2, 10, 127, 0, 1, 1, 1, 2, 10, 127, 0, 1, 1, 1, 2, 10, 127, 0, 1, 1, 1, 2, 10, 127, 0, 1, 1, 1, 2, 10, 6, 1, 127, 0, 1, 1, 1, 2, 10, 6, 1, 127]
pins = []
supported_modes = []
for number in numbers:
if number == 127:
if supported_modes:
pins.append(supported_modes)
supported_modes = []
else:
supported_modes.append(number)
print pins
[[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 3, 8, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 4, 14],
[0, 1, 1, 1, 2, 10],
[0, 1, 1, 1, 2, 10],
[0, 1, 1, 1, 2, 10],
[0, 1, 1, 1, 2, 10],
[0, 1, 1, 1, 2, 10, 6, 1],
[0, 1, 1, 1, 2, 10, 6, 1]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.