python两个表格相同数据筛选_python列表重复项筛选分组

有类似列表如下:

list =  ['aaa',

'aaa',

'aaa',

'aaa',

'ccc',

'ccc',

'aaa',

'aaa',

'aaa',

'aaa',

'ccc',

'ccc',

'ccc',

'aaa',

'aaa',

'ccc',

'ccc',

'ccc',

'ccc',

'ccc']

希望能得到如下列表

[

[aaa,aaa,aaa],

[aaa,aaa,aaa,aaa],

[aaa,aaa],

[...],

...

]

试了好久总是不行,太笨吧,求解答。

前几位答主的思路让偶现在提炼出了问题正确的关键词(filter group),也意识到两个库有助于解决这类问题(itertools pandas)

放狗搜,找到的比较不错的答案特地贴在这里,供大家参考。

https://pythonpeixun.github.i…

知乎上有人问,Python中的列表按相同元素分割?

比如列表[0,0,0,1,1,2,3,3,3,2,3,3,0,0]分割成[0,0,0],[1,1],[2],[3,3,3],[2],[3,3],[0,0]

如何解决这样的问题呢?

首先说明,如果这样的题目都不能写出代码,原因在基本的循环判断没有搞清楚。

如果做这个习题,看黄哥的讲解,先要分析,分析看出是按照相邻元素是不是相同来分组。

设计解决方法,大问题化解为小问题,先化解为找出元素不相同的那个元素的索引,有这个索引后,再进行分组。

代码一:

# coding:utf-8

def group_by_element(lst):

'''基本思路是先取得不同元素起始的索引值,

再按照这个索引值取切片

'''

index = []

result = []

for i, _ in enumerate(lst):

if i < len(lst) - 1 and lst[i + 1] != lst[i]:

index.append(i + 1)

result.append(lst[:index[0]])

for i, item in enumerate(index):

if i < len(index) - 1:

result.append(lst[index[i]:index[i + 1]])

result.append(lst[item:])

return result

if __name__ == '__main__':

lst = [0, 0, 0, 1, 1, 2, 3, 3, 3, 2, 3, 3, 0, 0]

group = group_by_element(lst)

print group

代码二:

# coding:utf-8

def group_by_element(lst):

'''基本思路是先取得不同元素起始的索引值,

再按照这个索引值,用生成器分组。

'''

index = []

for i, _ in enumerate(lst):

if i < len(lst) - 1 and lst[i + 1] != lst[i]:

index.append(i + 1)

def take(lst, n):

for i in range(n):

yield next(lst)

if not hasattr(lst, 'next'):

lst = iter(lst)

begin = 0

for item in index:

x = list(take(lst, item - begin ))

begin = item

yield x

yield list(lst)

if __name__ == '__main__':

lst = [0, 0, 0, 1, 1, 2, 3, 3, 3, 2, 3, 3, 0, 0]

group = group_by_element(lst)

print list(group)

代码三:

# coding:utf-8

def group_by_element(lst):

'''基本思路用一个二维list [[]], 遍历list

判断前后元素是不是相等,如果相等添加到result[-1],如果

不相等,需要添加一个空[]

'''

result = [[]]

length = len(lst)

for i in range(length):

if i < length - 1:

if lst[i] == lst[i + 1]:

result[-1].append(lst[i])

else:

result[-1].append(lst[i])

result.append([])

result[-1].append(lst[i])

return result

if __name__ == '__main__':

lst = [0, 0, 0, 1, 1, 2, 3, 3, 3, 2, 3, 3, 0, 0]

group = group_by_element(lst)

print group

放码:

def modify(lst):

lst_len = len(lst)

new_lst = []

def group_lst(lst, i=0):

if i == lst_len:

return

j = i

_lst = []

while lst[j] == lst[i]:

_lst.append(lst[j])

i += 1

if i == lst_len:

new_lst.append(_lst)

break

else:

new_lst.append(_lst)

return group_lst(lst, i)

group_lst(lst)

return sorted(new_lst)

modify(lst)

结果:

[['aaa', 'aaa'],

['aaa', 'aaa', 'aaa', 'aaa'],

['aaa', 'aaa', 'aaa', 'aaa'],

['ccc', 'ccc'],

['ccc', 'ccc', 'ccc'],

['ccc', 'ccc', 'ccc', 'ccc', 'ccc']]

不造轮子了:

from itertools import groupby

from pprint import pprint

pprint([list(v) for _, v in groupby(lst)])

输出:

[['aaa', 'aaa', 'aaa', 'aaa'],

['ccc', 'ccc'],

['aaa', 'aaa', 'aaa', 'aaa'],

['ccc', 'ccc', 'ccc'],

['aaa', 'aaa'],

['ccc', 'ccc', 'ccc', 'ccc', 'ccc']]


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部