python 列表:将所有重复的项放入一个元组中
python list: put all repeated items into one tuple
我将我的问题简化为:
我有一个项目列表,我想将所有连续重复的项目放入一个元组中。
li = [1, 2, 2, 3, 4, 4, 4, 3, 5, 5, 1]
# now i want this:
result = [1, (2,2), 3, (4, 4, 4), 3, (5, 5), 1]
请帮帮我!
您可以使用 itertools.groupby
将列表中的连续相等值组合在一起。这允许您首先获得包含连续值的元组列表;这可能(或可能不会)在长 运行.
中更容易使用
>>> import itertools
>>> li = [1, 2, 2, 3, 4, 4, 4, 3, 5, 5, 1]
>>> tups = [tuple(t) for _, t in itertools.groupby(li)]
tups
是一个元组列表,如下所示:
[(1,), (2, 2), (3,), (4, 4, 4), (3,), (5, 5), (1,)]
要用单个元素替换所有长度为 1 的元组,您可以 运行 另一个列表理解 tups
:
>>> [x[0] if len(x) == 1 else x for x in tups]
[1, (2, 2), 3, (4, 4, 4), 3, (5, 5), 1]
不使用任何外部库的另一种方式。
这是代码:
#!/usr/bin/python
a=[1,2,3,3,4,4,4,5,5,6,6,6,6,7]
print a
result=[]
buff=()
for i in a:
if a.count(i)==1:
result.append(i)
else:
for j in xrange(a.count(i)):
buff += (i,)
if not buff in result:
result.append(buff)
buff=()
print result
现在让我们深入探讨一下
for i in a:
if a.count(i)==1:
result.append(i)
如果元素只遇到一次,就把它放入结果列表
else:
for j in xrange(a.count(i)):
buff += (i,)
if not buff in result:
result.append(buff)
buff=()
如果元素在列表中遇到不止一次,则计算多少次,然后创建一个元组,如果结果列表中没有这样的元组,则将其添加到结果列表并输出结果。
[1, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7]
[1, 2, (3, 3), (4, 4, 4), (5, 5), (6, 6, 6, 6), 7]
我将我的问题简化为: 我有一个项目列表,我想将所有连续重复的项目放入一个元组中。
li = [1, 2, 2, 3, 4, 4, 4, 3, 5, 5, 1]
# now i want this:
result = [1, (2,2), 3, (4, 4, 4), 3, (5, 5), 1]
请帮帮我!
您可以使用 itertools.groupby
将列表中的连续相等值组合在一起。这允许您首先获得包含连续值的元组列表;这可能(或可能不会)在长 运行.
>>> import itertools
>>> li = [1, 2, 2, 3, 4, 4, 4, 3, 5, 5, 1]
>>> tups = [tuple(t) for _, t in itertools.groupby(li)]
tups
是一个元组列表,如下所示:
[(1,), (2, 2), (3,), (4, 4, 4), (3,), (5, 5), (1,)]
要用单个元素替换所有长度为 1 的元组,您可以 运行 另一个列表理解 tups
:
>>> [x[0] if len(x) == 1 else x for x in tups]
[1, (2, 2), 3, (4, 4, 4), 3, (5, 5), 1]
不使用任何外部库的另一种方式。 这是代码:
#!/usr/bin/python
a=[1,2,3,3,4,4,4,5,5,6,6,6,6,7]
print a
result=[]
buff=()
for i in a:
if a.count(i)==1:
result.append(i)
else:
for j in xrange(a.count(i)):
buff += (i,)
if not buff in result:
result.append(buff)
buff=()
print result
现在让我们深入探讨一下
for i in a:
if a.count(i)==1:
result.append(i)
如果元素只遇到一次,就把它放入结果列表
else:
for j in xrange(a.count(i)):
buff += (i,)
if not buff in result:
result.append(buff)
buff=()
如果元素在列表中遇到不止一次,则计算多少次,然后创建一个元组,如果结果列表中没有这样的元组,则将其添加到结果列表并输出结果。
[1, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7]
[1, 2, (3, 3), (4, 4, 4), (5, 5), (6, 6, 6, 6), 7]