将列表拆分为组成部分

时间:2018-07-16 16:56:53

标签: python

我有一个看起来像这样的列表:

list = ['EDZ8 comdtyEDM1 comdtyEDU1 comdty', 'EDZ8 comdtyEDM1 comdtyEDZ1 comdty', 'EDZ8 comdtyEDM1 comdtyEDH2 comdty']

我想拆分为列表列表

split_list = [['EDZ8 comdty', 'EDM1 comdty', 'EDU1 comdty'],['EDZ8 comdty', 'EDM1 comdty', 'EDZ1 comdty'], ['EDZ8 comdty', 'EDM1 comdty', 'EDH2 comdty']]
关于如何执行此操作的任何想法?每个字符串的长度均相同,需要拆分的部分每个长度为11个字符。

2 个答案:

答案 0 :(得分:2)

由于字符串长度是一个常数,因此您可以使用列表推导将每个字符串拆分为长度为11的块:

n = 11
x = ['EDZ8 comdtyEDM1 comdtyEDU1 comdty', 'EDZ8 comdtyEDM1 comdtyEDZ1 comdty', 'EDZ8 comdtyEDM1 comdtyEDH2 comdty']
res = [[s[i:i+n] for i in range(0, len(s), n)] for s in x]

输出:

[['EDZ8 comdty', 'EDM1 comdty', 'EDU1 comdty'],
 ['EDZ8 comdty', 'EDM1 comdty', 'EDZ1 comdty'],
 ['EDZ8 comdty', 'EDM1 comdty', 'EDH2 comdty']]

答案 1 :(得分:0)

使用列表理解和正则表达式(假设所有数据点都以ED开头):

    my_list=['EDZ8 comdtyEDM1 comdtyEDU1 comdty, EDZ8 comdtyEDM1 comdtyEDZ1 comdty, EDZ8 comdtyEDM1 comdtyEDH2 comdty'] 

    string_lists = [x.split(',') for x in my_list]
    final_list = [[re.findall(r'ED\w+ comdty', string) for string in string_list] for string_list in string_lists]

这样,它将对“ my_list”中有多少个元素执行此过程。在这种情况下,由于只有一个,输出将为

[[['EDZ8 comdty', 'EDM1 comdty', 'EDU1 comdty'], ['EDZ8 comdty', 'EDM1 comdty', 'EDZ1 comdty'], ['EDZ8 comdty', 'EDM1 comdty', 'EDH2 comdty']]]

这是列表列表的列表。 final_list[0]是列表my_list中的第一个字符串,分为想要的列表列表,因此如果将来列表中有2个字符串,则将有元素final_list[0]final_list[1]

此答案与另一个答案之间的区别是,在不了解列表中每个字符串长度的情况下,此方法将起作用。另一个答案也有效,但这可以防止字符串中的可变长度