Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python分离列表数据_Python_Python 3.x_List_Loops - Fatal编程技术网

使用Python分离列表数据

使用Python分离列表数据,python,python-3.x,list,loops,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,

我有一个多个字符串的列表),我想通过以下方式将它们分开:

主要名单:

[
    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

]
如果在主列表中找到字符串
“\u None\u None\u None”
,它可以将此数据添加到新的空列表中,并将剩余的
STR_XX\u XX\u 0001
值添加到另一个列表中,直到找到另一个带有“\u None\u None\u None”的字符串并执行相同操作

我自己也试过了,但我想当循环找到下一个字符串时,我将无法中断循环,因为该字符串带有
“\u None\u 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值分组到单独的列表中,那么这是一个很好的注释用例。它将以方便、高效的方式为您创建组,并且您的循环看起来几乎相同:

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']]

您可以尝试以下代码段:

dlist = ["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"]

with_None = [elem for elem in dlist if elem.endswith("_None")]
without_None = [elem for elem in dlist if not elem.endswith("_None")]
您还可以为流程编写通用函数:

def cust_sept(src_list, value_to_find,f):
    with_value, without_value = [elem for elem in dlist if f(elem,value_to_find)],[elem for elem in dlist if not f(elem,value_to_find)]
    return with_value,without_value

list_one,list_two = cust_sept(dlist,"_None",str.endswith)

尝试使用正则表达式模式来获取所有带有_None的项。我已经实现了List1输出,但不是List2OP要求List2作为组。是的,List2输出应该是子列表列表。当从主dlistOP ASQUEST List2中找到带有
“u None”
的新字符串时,应将数据分隔开,如下所示:group@SmartManoj,也许你是对的,这在问题中不是特别清楚。我添加了一个编辑。谢谢。是的,这正是我想要的,但是有没有办法,我们可以不用
itertools来做同样的事情。groupby
,只是使用清晰的条件概念,只是想知道你的想法!