列表到基于列表中元素的元组列表?

2024-04-19 14:22:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表L=[1,2,3,5n,4,9,6n,1,3,4,5n]。你知道吗

某些元素中的n表示分组的结束。有没有办法把这个列表变成元组列表?你知道吗

例如,[(1,2,3,5n),(4,5,9,6n),(1,3,4,5n)]?你知道吗

我知道我可以创建一个迭代器it=iter(L),然后压缩迭代器来创建一个元组列表,但是我不知道如何使用“n”标志来表示元组的创建。你知道吗

n总是相同的,总是表示分组的结束。谢谢您!你知道吗

编辑:列表中的所有元素都是字符串,输出也应该是字符串的元组。你知道吗


Tags: 字符串元素编辑列表标志it元组iter
2条回答

单向使用itertools.groupby

from itertools import groupby
l =  [1, 2, 3, '5n', 4, 5, 9, '6n', 1, 3, 4, '5n']
grp = [list(g) for k,g in groupby(l, lambda x:'n' in str(x))]
[tuple(i+j) for i, j in zip(grp[::2],grp[1::2])]
#[(1, 2, 3, '5n'), (4, 5, 9, '6n'), (1, 3, 4, '5n')]

对于您在评论中的要求,我将使用loop

lst =  [1, 2, 3, '5n', '6n', 1, 3, 4, '5n']
l = []
l1 = []
for i in lst:
    if 'n' in str(i):
        l.append(i)
        l1.append(l)
        l = []
    else:
        l.append(i)
print (l1)
#[[1, 2, 3, '5n'], ['6n'], [1, 3, 4, '5n']]

或者对两个列表都使用re.findall

import re
L = [1, 2, 3, '5n', 4, 5, 9, '6n', 1, 3, 4, '5n']
s = ':'.join(map(str,L))
[tuple(i.split(':')) for i in re.findall(r'([^:].*?n)', s)]
#[('1', '2', '3', '5n'), ('4', '5', '9', '6n'), ('1', '3', '4', '5n')]

假设您的列表如下:

l = [1, 2, 3, '5n', 4, 9, '6n', 1, 3, 4, '5n']
[tuple(x) for x in ''.join(map(str,l)).split('n') if x]
Out[1]: [('1', '2', '3', '5'), ('4', '9', '6'), ('1', '3', '4', '5')]

另一种方式是@Matias Cicero提到的

list(map(tuple, filter(lambda x: x, ''.join(map(str, l)).split('n'))))

相关问题 更多 >