如何在python中划分列表?

如何在python中划分列表?,python,list,python-3.4,Python,List,Python 3.4,我有这个例子 list1=['p1',p2',p3',p4',['p5',p6',p7']]如果任何变量与其他变量相同,则将其拆分为一组。假设p1和p4相同,p5和p6相同。所以我想要一个新的列表 list2=['p1',p4'],['p2',p3'],['p5',p6'],'p7']。所以我需要如何划分它们,请帮助。我正在使用最新版本的python 好的,为了在我的程序中更具体地描述“相同”,我使用p1和p4,如果它们对某个字符给出相同的结果,那么我将它们合并到一个组中。范例 if dicti

我有这个例子
list1=['p1',p2',p3',p4',['p5',p6',p7']]
如果任何变量与其他变量相同,则将其拆分为一组。假设p1和p4相同,p5和p6相同。所以我想要一个新的列表
list2=['p1',p4'],['p2',p3'],['p5',p6'],'p7']
。所以我需要如何划分它们,请帮助。我正在使用最新版本的python

好的,为了在我的程序中更具体地描述“相同”,我使用p1和p4,如果它们对某个字符给出相同的结果,那么我将它们合并到一个组中。范例

if dictionary.get(p1, character) is dictionary.get(p4, character)

如果您还有更多问题,请问我。

以下内容将为您提供该结果:

list1=[[1, 2, 2, 1], [3, 4, 3]]

print [[item]*lst.count(item) for lst in list1 for item in list(set(lst))]

[OUTPUT]
[[1, 1], [2, 2], [3, 3], [4]]
例1 例2 使用配方和:

演示:

>>> print(solve([[1, 2, 2, 1], [3, 4, 3]]))
[[1, 1], [2, 2], [3, 3], [4]]
>>> print(solve([['hello', 'hello', 'hello', 'what'], ['i', 'am', 'i']]))
[['hello', 'hello', 'hello'], ['what'], ['i', 'i'], ['am']]
>>> print(solve([[1,2,3,2,1],[9,8,7,8,9],[5,4,6,4,5]]))
[[1, 1], [2, 2], [3], [9, 9], [8, 8], [7], [5, 5], [4, 4], [6]]
如您所见,这也保留了项目的顺序


独特配方的代码:

from itertools import filterfalse

def unique_everseen(iterable, key=None):
    "List unique elements, preserving order. Remember all elements ever seen."
    # unique_everseen('AAAABBBCCDAABBB') --> A B C D
    # unique_everseen('ABBCcAD', str.lower) --> A B C D
    seen = set()
    seen_add = seen.add
    if key is None:
        for element in filterfalse(seen.__contains__, iterable):
            seen_add(element)
            yield element
    else:
        for element in iterable:
            k = key(element)
            if k not in seen:
                seen_add(k)
                yield element

我需要使用字符串,但如果你能用数字给我一个答案,那么好的,我会查一下。你怎么理解“相同”?哪个Python操作符将确定:
=
?我只需为循环使用一个
。我很好奇相同项的列表有多有用。如果有一本字典,以单词为键,以它们各自的频率为值,岂不是更好?
from collections import Counter

def solve(lst):
    counters = map(Counter, lst)
    return [ [uniq]*c[uniq] for seq, c in zip(lst, counters)
                                                for uniq in unique_everseen(seq)]
>>> print(solve([[1, 2, 2, 1], [3, 4, 3]]))
[[1, 1], [2, 2], [3, 3], [4]]
>>> print(solve([['hello', 'hello', 'hello', 'what'], ['i', 'am', 'i']]))
[['hello', 'hello', 'hello'], ['what'], ['i', 'i'], ['am']]
>>> print(solve([[1,2,3,2,1],[9,8,7,8,9],[5,4,6,4,5]]))
[[1, 1], [2, 2], [3], [9, 9], [8, 8], [7], [5, 5], [4, 4], [6]]
from itertools import filterfalse

def unique_everseen(iterable, key=None):
    "List unique elements, preserving order. Remember all elements ever seen."
    # unique_everseen('AAAABBBCCDAABBB') --> A B C D
    # unique_everseen('ABBCcAD', str.lower) --> A B C D
    seen = set()
    seen_add = seen.add
    if key is None:
        for element in filterfalse(seen.__contains__, iterable):
            seen_add(element)
            yield element
    else:
        for element in iterable:
            k = key(element)
            if k not in seen:
                seen_add(k)
                yield element