当 j 有时为 0 时,如何避免不一致的 s[i:-j] 切片行为?

Posted

技术标签:

【中文标题】当 j 有时为 0 时,如何避免不一致的 s[i:-j] 切片行为?【英文标题】:How to avoid inconsistent s[i:-j] slicing behaviour when j is sometimes 0? 【发布时间】:2017-08-02 21:01:16 【问题描述】:

我正在创建列表的多个切片[-WINDOW-i:-i],其中i 介于320 之间:

vals = []

for i in range(32, -1, -1):
    vals.append(other_list[-WINDOW-i:-i])

i == 0 时,返回一个长度为 0 的切片:

other_list[-WINDOW-0:0]

我不想这样做来解决它:

vals = []

for i in range(32, -1, -1):
    if i == 0:
       vals.append(other_list[-WINDOW:])
    else:
       vals.append(other_list[-WINDOW-i:-i])

...因为如果我有很多列表要附加到vals,它会变得一团糟。

有没有干净的方法来做到这一点?

【问题讨论】:

你能添加你的输入和预期输出吗? 【参考方案1】:

解决 Python 切片中这种怪癖的一种解决方法是利用以下事实:

    false_ish_value or other_value 总是评估为 other_value 0 是唯一一个在布尔上下文中为 false-ish 的整数 s[n:None] 等价于 s[n:]

考虑到这些,您可以将切片编写为:

other_list[-WINDOW-i:(-i or None)]

…只有当i(因此-i)为0时,切片才会被解释为[-WINDOW-i:None](与[-WINDOW-i:]相同)。

【讨论】:

以上是关于当 j 有时为 0 时,如何避免不一致的 s[i:-j] 切片行为?的主要内容,如果未能解决你的问题,请参考以下文章

bzoj_3529 数表

Make Palindrome UVA - 10453

Cow Exhibition POJ 2184(01背包dp)

蠡口115. Distinct Subsequences

如何避免MySQL主从复制数据不一致?

[Hot100]10. 正则表达式匹配