小编ded*_*ded的帖子

python返回列表中连续整数的列表

我有一个整数列表,我想生成一个包含所有连续整数列表的列表.

#I have:
full_list = [0,1,2,3,10,11,12,59]
#I want:
continuous_integers = [[0,1,2,3], [10,11,12], [59]]
Run Code Online (Sandbox Code Playgroud)

我有以下工作,但似乎是一个糟糕的方式:

sub_list = []
continuous_list = []
for x in full_list:
    if sub_list == []:
        sub_list.append(x)
    elif x-1 in sub_list:
        sub_list.append(x)
    else:
        continuous_list.append(sub_list)
        sub_list = [x]
continuous_list.append(sub_list)
Run Code Online (Sandbox Code Playgroud)

我已经看到其他问题表明itertools.groupby是一种有效的方法,但是我不熟悉这个函数,我似乎在编写lambda函数来描述连续性时遇到了麻烦.

问题:有没有更好的方法(可能使用itertools.groupby?)

注意事项:full_list将包含1到59个整数,将始终排序,整数将介于0到59之间.

python lambda group-by continuous python-itertools

5
推荐指数
1
解决办法
552
查看次数

使用 defaultdict 替换 python 中的 try 和/或 if 语句

我最近发现并开始使用默认字典来替换几个更庞大的结构。我在《Python 之禅》中读到,Python 的关键点之一是“应该有一种——最好只有一种——明显的方法来做到这一点。”

基于该标准(或者更实际地基于内存使用情况或速度)以下哪一项(或完全不同的东西)是最好的?我有预感第一个是正确的,但想听听其他人的意见。

my_dict = defaultdict(int)
for generic in iterable:
    my_dict[generic] +=1
Run Code Online (Sandbox Code Playgroud)

或者:

my_dict = {}
for generic in iterable:
    if generic not in my_dict:
        my_dict[generic] = 1
    else:
        my_dict[generic]+=1
Run Code Online (Sandbox Code Playgroud)

或者:

my_dict = {}
for generic in iterable:
    try:
        my_dict[generic] += 1
    except(KeyError):
        my_dict[generic] = 1
Run Code Online (Sandbox Code Playgroud)

使用 my_dict = defaultdict(list) 和使用附加函数也可以这样说。假设使用多个 for 循环或其他条件,而不是简单地从单个可迭代中计算泛型值,因为这显然会具有不同的功能。

python try-catch defaultdict

5
推荐指数
1
解决办法
1288
查看次数