簡體   English   中英

如何基於列表中的某些值在Python中創建2D列表

[英]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

repl.it上演示

碼:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM