我有一个看起来像这样的列表:
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个字符。
答案 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]
此答案与另一个答案之间的区别是,在不了解列表中每个字符串长度的情况下,此方法将起作用。另一个答案也有效,但这可以防止字符串中的可变长度