我在一个领域工作,其中范围通常包含在内.我有人类可读的描述,例如from A to B,代表包括两个端点的范围 - 例如from 2 to 4手段2, 3, 4.
在Python代码中使用这些范围的最佳方法是什么?以下代码用于生成包含的整数范围,但我还需要执行包含切片操作:
def inclusive_range(start, stop, step):
return range(start, (stop + 1) if step >= 0 else (stop - 1), step)
Run Code Online (Sandbox Code Playgroud)
唯一的完整的解决方案我看到的是明确使用+ 1(或- 1)我每次使用时间range或切片符号(例如range(A, B + 1),l[A:B+1],range(B, A - 1, -1)).这种重复是否真的是与包容性范围一起工作的最佳方式?
编辑:感谢L3viathan的回答.编写inclusive_slice函数来补充inclusive_range当然是一种选择,尽管我可能会写如下:
def inclusive_slice(start, stop, step):
...
return slice(start, (stop + 1) if step >= 0 else (stop …Run Code Online (Sandbox Code Playgroud) 如何从以下方面有效,优雅和蟒蛇地提取物品3..6 deque而不改变它:
from collections import deque
q = deque('',maxlen=10)
for i in range(10,20):
q.append(i)
Run Code Online (Sandbox Code Playgroud)
在片符号似乎并没有一起工作deque......
我正在寻找一种快速,干净,pythonic的方法来将列表划分为n个几乎相等的分区.
partition([1,2,3,4,5],5)->[[1],[2],[3],[4],[5]]
partition([1,2,3,4,5],2)->[[1,2],[3,4,5]] (or [[1,2,3],[4,5]])
partition([1,2,3,4,5],3)->[[1,2],[3,4],[5]] (there are other ways to slice this one too)
Run Code Online (Sandbox Code Playgroud)
这里有几个答案迭代列表切片非常接近我想要的,除了它们专注于列表的大小,我关心列表的数量(其中一些也填充无).显然,这些很容易转换,但我正在寻找最佳实践.
同样,人们在这里指出了很好的解决方案如何将列表拆分成大小均匀的块?对于一个非常类似的问题,但我对分区的数量比特定大小更感兴趣,只要它在1以内.再次,这是可以轻易转换的,但我正在寻找最佳实践.
这很简单,但我喜欢这种漂亮的pythonic方式.基本上,给定一个字典,返回仅包含以某个字符串开头的那些键的子字典.
» d = {'Apple': 1, 'Banana': 9, 'Carrot': 6, 'Baboon': 3, 'Duck': 8, 'Baby': 2}
» print slice(d, 'Ba')
{'Banana': 9, 'Baby': 2, 'Baboon': 3}
Run Code Online (Sandbox Code Playgroud)
这对函数来说相当简单:
def slice(sourcedict, string):
newdict = {}
for key in sourcedict.keys():
if key.startswith(string):
newdict[key] = sourcedict[key]
return newdict
Run Code Online (Sandbox Code Playgroud)
但肯定有一个更好,更聪明,更易读的解决方案?发电机可以帮忙吗?(我从来没有足够的机会使用它们).
有没有更好的方法从python中的列表中提取任意索引?
我目前使用的方法是:
a = range(100)
s = [a[i] for i in [5,13,25]]
Run Code Online (Sandbox Code Playgroud)
其中a是我要切片的数组,[5,13,25]是我想要的元素.它似乎比Matlab等价物更冗长:
a = 0:99;
s = a([6,14,26])
Run Code Online (Sandbox Code Playgroud) 只是想知道是否有一个Ruby习惯用法从索引中提取子字符串直到字符串结尾.我知道str[index..-1]它在一个范围内的对象传递给工作String的[]方法,但它是一个有点笨拙.例如,在python中,您可以编写str[index:]哪些内容可以隐式地获取字符串的其余部分.
例:
s = "hello world"
s[6..-1] # <-- "world"
Run Code Online (Sandbox Code Playgroud)
还有什么比这更好的s[6..-1]吗?
这看起来微不足道,但我找不到办法.
例如,
fn f(s: &[u8]) {}
pub fn main() {
let x = "a";
f(x)
}
Run Code Online (Sandbox Code Playgroud)
无法编译:
error: mismatched types:
expected `&[u8]`,
found `&str`
(expected slice,
found str) [E0308]
Run Code Online (Sandbox Code Playgroud)
但是,文件指出:
strs的实际表示具有与切片的直接映射:&str与&[u8]相同.
Python教程解释了索引为负时的切片行为,但是当结束索引在起始索引之前时,我找不到描述行为的文档.(我也看过Explain Python的切片符号,也许我读的不够仔细,但那里的答案似乎没有解决这一点.)
我观察到的行为是返回一个空列表,这对我来说似乎是合理的.但是,对于我来说i,j在相反的顺序之间返回项目列表或仅仅提出异常对我来说似乎也是合理的.
是list[i:j]保证是一个空列表,如果list[j]先于list[i]?
给出一个清单
a = range(10)
Run Code Online (Sandbox Code Playgroud)
您可以使用诸如的语句对其进行切片
a[1]
a[2:4]
Run Code Online (Sandbox Code Playgroud)
但是,我想基于代码中其他位置设置的变量来执行此操作.我可以轻松地为第一个做这个
i = 1
a[i]
Run Code Online (Sandbox Code Playgroud)
但是我如何为另一个做这个呢?我试过用列表编制索引:
i = [2, 3, 4]
a[i]
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我也尝试过使用字符串:
i = "2:4"
a[i]
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.
这可能吗?
什么是C#等效的Python切片操作?
my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
result1 = my_list[2:4]
result2 = my_list[1:]
result3 = my_list[:3]
result4 = my_list[:3] + my_list[4:]
Run Code Online (Sandbox Code Playgroud)
这里有一些内容,但它很难看,并没有解决切片的所有用途,以至于没有明显回答这个问题.
slice ×10
python ×8
list ×4
string ×2
c# ×1
deque ×1
dictionary ×1
equivalent ×1
idiomatic ×1
ironpython ×1
range ×1
ruby ×1
rust ×1
substring ×1