繁体   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