我想在列表中标识连续数字组,以便:
myfunc([2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20])
Run Code Online (Sandbox Code Playgroud)
返回:
[(2,5), (12,17), 20]
Run Code Online (Sandbox Code Playgroud)
并且想知道最好的方法是什么(特别是如果在Python中有内置的东西).
编辑:注意我原本忘了提到个别数字应该作为单独的数字返回,而不是范围.
primes = [2,3,5,7..] (prime numbers)
map(lambda x:print(x),primes)
Run Code Online (Sandbox Code Playgroud)
它不打印任何东西.这是为什么?我试过了
sys.stdout.write(x)
Run Code Online (Sandbox Code Playgroud)
也是,但也不起作用.
在python中,可以使用is关键字来检查包含,例如
>>> 3 in [1,2,3,4,5]
True
Run Code Online (Sandbox Code Playgroud)
但是,如果它检查单个整数列表是否在引用列表中,则不会产生相同的输出[1,2,3,4,5]:
>>> [3] in [1,2,3,4,5]
False
Run Code Online (Sandbox Code Playgroud)
此外,无法通过以下方式检查参考列表中的子序列:
>>> [3,4,5] in [1,2,3,4,5]
False
Run Code Online (Sandbox Code Playgroud)
有没有办法让函数检查子序列,以便以下返回true?例如函数调用x_in_y():
>>> x_in_y([3,4,5], [1,2,3,4,5])
True
>>> x_in_y([3], [1,2,3,4,5])
True
>>> x_in_y(3, [1,2,3,4,5])
True
>>> x_in_y([2,3], [1,2,3,4,5])
True
>>> x_in_y([2,4], [1,2,3,4,5])
False
>>> x_in_y([1,5], [1,2,3,4,5])
False
Run Code Online (Sandbox Code Playgroud)
也许来自itertools或的东西operator?
(注意,输入列表可以是非唯一的)
我有一个日期数组,其中可以包含多个日期范围。
dates = [
'2020-01-01',
'2020-01-02',
'2020-01-03',
'2020-01-06',
'2020-01-07',
'2020-01-08'
]
Run Code Online (Sandbox Code Playgroud)
在此示例中,列表包含 2 个单独的连续日期范围(2020-01-01 到 2020-01-03 & 2020-01-06 到 2020-01-08)
我试图弄清楚如何遍历此列表并找到所有连续的日期范围。
我正在看的一篇文章(如何检测 Python 中的日期是否连续?)似乎有一个很好的方法,但是,我正在努力在我的用例中实现这个逻辑。
我有一个清单
[38, 98, 110, 111, 112, 120, 121, 898]
Run Code Online (Sandbox Code Playgroud)
如何将连续数字合并为表示范围的对?
期望的输出:
['38',
'98',
'110,112',
'120,121',
'898']
Run Code Online (Sandbox Code Playgroud) 免责声明:这里已经在 Python 上下文中提出了一个非常相似的问题。这是关于 C#。
我有一个包含整数的枚举,例如:
[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)
我想出了:
public static void Main()
{
System.Diagnostics.Debug.WriteLine(FindConsecutiveNumbers(new int[] { 1,2, 7,8,9, 12, 15, 20,21 }));
}
private static string FindConsecutiveNumbers(IEnumerable<int> numbers)
{
var sb = new StringBuilder();
int? start = null;
int? lastNumber = null;
const string s = ", ";
const string c = "-";
var numbersPlusIntMax = numbers.ToList();
numbersPlusIntMax.Add(int.MaxValue);
foreach (var number in numbersPlusIntMax)
{
var …Run Code Online (Sandbox Code Playgroud) list ×4
python ×4
algorithm ×2
python-3.x ×2
c# ×1
continuous ×1
date ×1
datetime ×1
dictionary ×1
range ×1