首页 > 解决方案 > 使用 Python 分离列表数据

问题描述

我有一个多个字符串的列表),我想将它们分开:

主列表:

[
    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 是带有子列表的列表

标签: pythonpython-3.xlistloops

解决方案


你让它有点太复杂了,你可以让列表在没有内部 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']]

推荐阅读