相关疑难解决方法(0)

我如何使用Python的itertools.groupby()?

我无法找到关于如何实际使用Python itertools.groupby()函数的可理解的解释.我想要做的是这样的:

  • 列出一个列表 - 在这种情况下,是一个客观化lxml元素的孩子
  • 根据某些标准将其划分为不同的组
  • 然后分别迭代这些组中的每一个.

我已经阅读了文档示例,但是我在尝试将它们应用到简单的数字列表之外时遇到了麻烦.

那么,我该如何使用itertools.groupby()?我应该使用另一种技术吗?指向良好的"先决条件"阅读的指针也将受到赞赏.

python iteration

463
推荐指数
13
解决办法
26万
查看次数

如何在numpy中找到数组中连续元素的组?

我必须从numpy数组中聚集连续元素.考虑以下示例

    a = [ 0, 47, 48, 49, 50, 97, 98, 99]
Run Code Online (Sandbox Code Playgroud)

输出应该是一个元组列表,如下所示

   [(0),(47, 48, 49, 50),(97, 98, 99)]
Run Code Online (Sandbox Code Playgroud)

这里差别只是一个.元素之间.如果差异也可以指定为限制或硬编码数字,那将是很好的.

非常感谢.

python numpy

56
推荐指数
5
解决办法
3万
查看次数

检测列表中的连续整数

我有一个包含数据的列表:

[1, 2, 3, 4, 7, 8, 10, 11, 12, 13, 14]
Run Code Online (Sandbox Code Playgroud)

我想打印出连续整数的范围:

1-4, 7-8, 10-14
Run Code Online (Sandbox Code Playgroud)

是否有内置/快速/有效的方法来做到这一点?

python algorithm list

48
推荐指数
3
解决办法
4万
查看次数

在python中将整数列表转换为范围

python中是否存在可以将增加的整数列表转换为范围列表的内容

例如,给定{0,1,2,3,4,7,8,9,11}我想得到{{0,4},{7,9},{11,11}}.

我可以写一个程序来做这个,但想知道python中是否有内置函数

python integer list range

31
推荐指数
3
解决办法
2万
查看次数

Pythonic将整数列表转换为逗号分隔范围字符串的方法

我有一个整数列表,我需要解析为一系列范围.

例如:

 [0, 1, 2, 3] -> "0-3"
 [0, 1, 2, 4, 8] -> "0-2,4,8"
Run Code Online (Sandbox Code Playgroud)

等等.

我还在学习更多pythonic处理列表的方法,这对我来说有点困难.我最近的想法是创建一个列表,跟踪配对数字:

[ [0, 3], [4, 4], [5, 9], [20, 20] ]
Run Code Online (Sandbox Code Playgroud)

然后,我可以遍历此结构,将每个子列表打印为范围或单个值.

我不喜欢在两次迭代中这样做,但我似乎无法跟踪每次迭代中的每个数字.我的想法是做这样的事情:

这是我最近的尝试.它有效,但我并不完全满意; 我一直在想,有一个更优雅的解决方案完全逃脱了我.字符串处理迭代不是最好的,我知道 - 对我来说这是很早的:)

def createRangeString(zones):
        rangeIdx = 0
        ranges   = [[zones[0], zones[0]]]
        for zone in list(zones):
            if ranges[rangeIdx][1] in (zone, zone-1):
                ranges[rangeIdx][1] = zone
            else:
                ranges.append([zone, zone])
                rangeIdx += 1

        rangeStr = ""
        for range in ranges:
            if range[0] != range[1]:
                rangeStr = "%s,%d-%d" % (rangeStr, range[0], range[1])
            else:
                rangeStr …
Run Code Online (Sandbox Code Playgroud)

python list

17
推荐指数
1
解决办法
2840
查看次数

Python - 使用列表推导查找增量编号序列

我在列表中有一系列数字,我正在寻找一个优雅的解决方案,最好是列表理解,以获得单个序列(包括单个值).我已经解决了这个小问题,但它并不是非常pythonic.

以下列表定义了输入序列:

input = [1, 2, 3, 4, 8, 10, 11, 12, 17]
Run Code Online (Sandbox Code Playgroud)

期望的输出应该是:

output = [
  [1, 2, 3, 4],
  [8],
  [10, 11, 12],
  [17],
]
Run Code Online (Sandbox Code Playgroud)

python list-comprehension list

12
推荐指数
2
解决办法
1256
查看次数

将连续整数分组并容忍1的间隙

在Python中,给定一个排序整数列表,我会按连续值对它们进行分组,容忍1的间隙.

例如,给出一个列表my_list:

In [66]: my_list
Out[66]: [0, 1, 2, 3, 5, 6, 10, 11, 15, 16, 18, 19, 20]
Run Code Online (Sandbox Code Playgroud)

我想要以下输出:

[[0, 1, 2, 3, 5, 6], [10, 11], [15, 16, 18, 19, 20]]
Run Code Online (Sandbox Code Playgroud)

现在,如果我不必忍受1的差距,我可以应用这里解释的整洁解决方案:

import itertools
import operator
results = []
for k, g in itertools.groupby(enumerate(my_list), lambda (i,x):i-x):
        group = map(operator.itemgetter(1), g)
        results.append(group)
Run Code Online (Sandbox Code Playgroud)

有没有办法将我的额外要求纳入上述解决方案?如果没有,解决问题的最佳方法是什么?

python grouping list python-itertools

9
推荐指数
3
解决办法
1652
查看次数

识别列表中不同连续数字的组

一篇SO帖子中,Python用户询问如何对连续数字进行分组,使得任何序列都可以由其开始/结束来表示,并且任何散列图都将显示为单个项目.接受的答案对于连续序列非常有效.

我需要能够适应类似的解决方案,但需要一系列具有潜在(并非总是)变化增量的数字.理想情况下,我如何表示也将包括增量(因此他们将知道它是否每隔3,4,5,n)

引用原始问题,用户要求输入/输出以下内容

[2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20]  # input
[(2,5), (12,17), 20]
Run Code Online (Sandbox Code Playgroud)

我想要的是以下内容(注意:为了清晰起见,我编写了一个元组作为输出,但是使用其步长变量优先选择xrange):

[2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20]  # input
[(2,5,1), (12,17,1), 20]  # note, the last element in the tuple would be the step value
Run Code Online (Sandbox Code Playgroud)

它还可以处理以下输入

[2, 4, 6, 8, 12, 13, 14, 15, 16, 17, 20]  # input
[(2,8,2), (12,17,1), 20]  # note, the last element in the tuple would be …
Run Code Online (Sandbox Code Playgroud)

python

9
推荐指数
1
解决办法
337
查看次数

将数字列表转换为字符串范围

我想知道是否有这样做的这种相反的简单(或者已经创建)的方式: 生成联用编号列表....此链接可用于执行以下操作:

>> list(hyphen_range('1-9,12,15-20,23'))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 15, 16, 17, 18, 19, 20, 23]:
Run Code Online (Sandbox Code Playgroud)

我想做相反的事情(请注意,包括10和21,因此它将与范围函数兼容,其中范围(1,10)= [1,2,3,4,5,6,7,8 ,9]):

>> list_to_ranges([1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 15, 16, 17, 18, 19, 20, 23])
'1-10,12,15-21,23'
Run Code Online (Sandbox Code Playgroud)

最后,我想让输出还包含一个步骤,其中输出的最后一个数字表示步骤:

>> list_to_ranges([1, 3, 5, 7, 8, 9, 10, 11])
'1-13:2,8,10'
Run Code Online (Sandbox Code Playgroud)

从本质上讲,这最终会像"反向"范围函数

>> tmp = list_to_ranges([1, 3, 5])
>> print tmp
'1-7:2'
>> range(1, 7, 2)
[1, 3, 5]
Run Code Online (Sandbox Code Playgroud)

我的猜测是,没有真正简单/简单的方法可以做到这一点,但我想在我做一些蛮力,长方法之前我会问这里.

编辑

这篇文章的答案中的代码为例,我想出了一个简单的方法来完成第一部分.但我认为确定执行步骤的模式会有点困难.

from itertools …
Run Code Online (Sandbox Code Playgroud)

python sequences list range sequence

7
推荐指数
1
解决办法
6330
查看次数

在Java中查找列表中的连续整数组

我有一个按顺序排列的整数列表.我希望将连续整数组作为具有每组的第一个和最后一个整数的数组.

例如,对于(2,3,4,5,8,10,11,12,15,16,17,18,25),我想得到一个包含这些数组的列表:[2,5] [8,8] ] [10,12] [15,18] [25,25]

这是我的代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class MyRangesTest {


public static void main(String[] args) {
    //create list of integers
    List<Integer> list=Arrays.asList(2,3,4,5,8,10,11,12,15,16,17,18,25);
    System.out.println("list:" + list);


        //create a list with integers where a new sequense of consecutive integers starts or ends
        List<Integer> sublistsStarsAndEnds= new ArrayList<>();
        sublistsStarsAndEnds.add(list.get(0));//1st line (always in sublistsStarsAndEnds list)
        for (int i=1; i<list.size()-1; i++){
            if (list.get(i)>1+list.get(i-1)){
                sublistsStarsAndEnds.add(list.get(i-1));
                sublistsStarsAndEnds.add(list.get(i));
            }
        }
        sublistsStarsAndEnds.add(list.get(list.size()-1));//last line (always in sublistsStarsAndEnds list)
        System.out.println("sublistsStarsAndEnds: " + sublistsStarsAndEnds);//present the …
Run Code Online (Sandbox Code Playgroud)

java integer list

6
推荐指数
2
解决办法
3624
查看次数