Python 如何基于列表项断开列表并创建相关字符串
我有一个类似于以下列表的列表:Python 如何基于列表项断开列表并创建相关字符串,python,list,split,Python,List,Split,我有一个类似于以下列表的列表: ['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n'] 我想根据“\n”中断(拆分)并存储列表的信息。这意味着我想从上面的列表中创建以下字符串: string1='2019, Melbourne, region1, suburb1' string2='2018, region1, Melbourne' 我知道如何使用一个简单的for循环和围绕索引进行操作,
['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n']
我想根据“\n”中断(拆分)并存储列表的信息。这意味着我想从上面的列表中创建以下字符串:
string1='2019, Melbourne, region1, suburb1'
string2='2018, region1, Melbourne'
我知道如何使用一个简单的for循环和围绕索引进行操作,但我想知道是否有人能以更专业的方式帮助我完成上述任务。因为绕过索引会使我的代码有点复杂和不可读。您可以获得所需字符串的列表,使用适当的键函数将列表分块并将分块转换为字符串:
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
返回一个惰性迭代器,生成同样惰性的组。因此,这不会在内存中生成任何不必要的中间列表。您可以获得所需字符串的列表,使用适当的键函数将列表分块并将分块转换为字符串:
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
返回一个惰性迭代器,生成同样惰性的组。因此,这不会在内存列表中构建任何不必要的中间层。您可以这样做!使用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'
你可以这样做!使用
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'
我建议这样的解决方案:
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];
我建议这样的解决方案:
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];
一种可能的解决方案是使用join()将给定列表连接成一个字符串,然后对该字符串使用split将其拆分为列表。代码如下:
test=['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n']
test_string=",".join(test)
sep_list= test_string.split("\n")
您将得到一个由“\n”分隔的字符串列表。一个可能的解决方案是使用join()将给定列表连接成一个字符串,然后对字符串使用split将其拆分为列表。代码如下:
test=['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n']
test_string=",".join(test)
sep_list= test_string.split("\n")
您将得到一个由“\n”分隔的字符串列表。您可以使用split()
,但是我得到了一个意外的结果,所以我使用了regex
import re
l = ['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n']
string1 , string2 = re.findall("(?!,)([^\n]+)(?=,)" ,",".join(l))
print(string1,string2)
,
->匹配但不包含在结果中的字符串\n
结尾的str,
->匹配但不包含在结果中split()
,但是我得到了一个意外的结果,所以我使用了regex
import re
l = ['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n']
string1 , string2 = re.findall("(?!,)([^\n]+)(?=,)" ,",".join(l))
print(string1,string2)
,
->匹配但不包含在结果中的字符串\n
结尾的str,
->匹配但不包含在结果中将其转换为字符串,然后相应地拆分。@AkshayNevrekar这就像是拿一个几乎完整的拼图,将其混合,然后重新开始。将其转换为字符串,然后相应地拆分。@AkshayNevrekar这就像拿一个几乎完整的拼图,将其混合,然后重新开始。“我知道如何使用simple for loop和Play around Index来实现这一点,但我[想要]一种更专业的方式。”“我知道如何使用simple for loop和Play around Index来实现这一点,但我[想要]一种更专业的方式。”
,“
不是OP想要的连接器(即,”
)。此外,您还必须移除(剥离)你的拆分返回的令牌中有虚假的,
。你说得对。我刚刚运行了代码并注意到了额外的“,”。感谢你指出!,“
不是OP想要的连接器(即,”
)。此外,你还必须移除(剥离)伪,“
来自您的拆分返回的令牌。你说得对。我刚刚运行了代码并注意到了额外的“,”。感谢您指出!