![](/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.