python - 使用Python分离列表数据

标签 python python-3.x list loops

我有一个包含多个字符串的列表),我想用以下方式分隔它们:

主要列表:

[
    GENERAL NOTES & MISCELLANEOUS DETAILS_None_None_None, 
    STR_XX_XX_0001, 
    STR_XX_XX_0002, 
    STR_XX_XX_0003, 
    GENERAL ARRANGEMENT_None_None_None, 
    STR_XX_XX_10001.0, 
    STR_XX_XX_10002.0, 
    STR_XX_XX_10003.0, 
    STR_XX_XX_10004.0, 
    STR_XX_XX_10005.0, 
    STR_XX_XX_10006.0

]

如果在主列表中找到字符串“_None_None_None”,它可以将此数据添加到新的空列表中,并将剩余的STR_XX_XX_0001值添加到另一个列表中,直到找到为止另一个带有“_None_None_None”的字符串并执行相同的操作。

我自己尝试过,但我认为当它找到下一个带有 "_None_None_None" 的字符串时,我将无法中断循环。只是想办法,不确定逻辑是否正确。

    empty1 = []
    empty2 = []

    for i in MainList:
            if "_None_None_None" in i:
               empty1.append(i)
            # Need help on hear onwards
            else:
                while "_None" not in i:
                    empty2.append(i)
                break

我期待两个列表中的输出结果。像这样的事情:

列表1:

[
    GENERAL NOTES & MISCELLANEOUS DETAILS_None_None_None, 
    GENERAL ARRANGEMENT_None_None_None
]

列表2:

[
[STR_XX_XX_0001,STR_XX_XX_0002,STR_XX_XX_0003],[STR_XX_XX_10001.0,STR_XX_XX_10002.0,STR_XX_XX_10003.0,STR_XX_XX_10004.0,STR_XX_XX_10005.0,STR_XX_XX_10006.0]
]

List2是带有子列表的列表

最佳答案

你让它有点太复杂了,你可以让列表在没有内部 while 循环的情况下完整运行。只需对循环中显示的每个元素做出决定即可:

empty1 = []
empty2 = []

for i in MainList:
    if "_None_None_None" in i:
        empty1.append(i)
    else:
        empty2.append(i)

这将为您提供两个列表:

> empty1
> ['GENERAL NOTES & MISCELLANEOUS DETAILS_None_None_None',
 'GENERAL ARRANGEMENT_None_None_None']

> empty2
> ['STR_XX_XX_0001',
 'STR_XX_XX_0002',
 'STR_XX_XX_0003',
 'STR_XX_XX_10001.0',
 'STR_XX_XX_10002.0',
 'STR_XX_XX_10003.0',
 'STR_XX_XX_10004.0',
 'STR_XX_XX_10005.0',
 'STR_XX_XX_10006.0']

根据评论进行编辑

如果评论者是正确的,并且您希望将非 NONE 值分组到单独的列表中,那么这是 itertools.groupby 的一个很好的用例。它将以一种方便、高效的方式为您创建组,并且您的循环看起来几乎相同:

from itertools import groupby

empty1 = []
empty2 = []

for k, i in groupby(MainList, key = lambda x: "_None_None_None" in x):
    if k:
        empty1.extend(i)
    else:
        empty2.append(list(i))

这将为您提供相同的empty1,但empty2不会是列表的列表:

[['STR_XX_XX_0001', 'STR_XX_XX_0002', 'STR_XX_XX_0003'],
 ['STR_XX_XX_10001.0',
  'STR_XX_XX_10002.0',
  'STR_XX_XX_10003.0',
  'STR_XX_XX_10004.0',
  'STR_XX_XX_10005.0',
  'STR_XX_XX_10006.0']]

关于python - 使用Python分离列表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56864440/

相关文章:

c++ - 如何在 swig 中使用 Mat_ 模板?

c++ - 添加两个字符列表

python - 如何验证传递参数的总数?

python - 使用 PyZMQ 限制队列长度

python - Dash CallBacks 一种获取函数的输出 Id 列表或静态变量的方法

python - IP 地址的 Tkinter 条目验证

python - Python 是否具有与 Haskell 的 'mask' 或 'bracket' 函数等效的函数?

python - 如果我使用感叹号,为什么 yaml 文件的输出中会出现引号?

list - Dart可观察 list 已移除项目

时间:: how to read from specific index in List<person>