如何根据列表项断开列表并创建相关字符串

时间:2018-09-24 06:58:05

标签: python list split

我有一个类似于以下内容的列表:

['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n']

我想中断(拆分)并基于'\ n'存储列表信息。这意味着我想从上面的列表中创建以下字符串:

string1='2019, Melbourne, region1, suburb1'
string2='2018, region1, Melbourne'

我知道如何使用简单的for循环和索引操作来做到这一点,但我想知道是否有人可以协助我以更专业的方式完成上述任务。因为围绕索引进行操作会使我的代码有点复杂且难以阅读。

5 个答案:

答案 0 :(得分:4)

您可以使用itertools.groupby和适当的键功能对列表进行分块,并使用str.join将分块转换为字符串,以获取所需字符串的列表:

from itertools import groupby

l = ['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n']

[', '.join(g) for k, g in groupby(l, key=lambda s: s != '\n') if k]
# ['2019, Melbourne, region1, suburb1', '2018, region1, Melbourne']

请注意,groupby返回一个产生相同延迟组的延迟迭代器。因此,这不会建立任何不必要的中间内存列表。

答案 1 :(得分:1)

您可以执行以下操作!使用re

import re
l = ['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n']
res = re.split("[\r\n]+",' '.join(l))[:-1]
string1 = res[0].strip().replace(' ',', ')
string2 = res[1].strip().replace(' ',', ')

# string1 --> '2019, Melbourne, region1, suburb1'
# string2 --> '2018, region1, Melbourne'

答案 2 :(得分:1)

一种可能的解决方案是使用join()将给定列表连接成一个字符串,然后对该字符串使用split拆分成list。以下是代码:

test=['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n']
test_string=",".join(test)

sep_list= test_string.split("\n")

您将获得由“ \ n”分隔的字符串列表

答案 3 :(得分:1)

您可以使用split(),但是我得到了意外的结果,所以我使用了正则表达式

import re
l = ['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n']
string1 , string2 = re.findall("(?!,)([^\n]+)(?=,)" ,",".join(l))
print(string1,string2)
  1. (?!,):用于匹配没有,开始的字符串->匹配但不包含结果
  2. ([[^ \ n] +):匹配str直到\n
  3. (?=,):匹配以,结尾的str->匹配但不包含在结果中

答案 4 :(得分:0)

我提出这样的解决方案:

listin=['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n'];
listsout=[];sublist=[];
for val in listin:
    if val.__contains__('\n')==False:
        sublist.append(val);
    else:
        listsout.append([i for i in sublist]);
        sublist = [];
# --------------------------------------------
strings = [', '.join(sublist) for sublist in listsout];