【问题标题】:How can a comparison operator be used with a[i:] < b[i:]? [duplicate]比较运算符如何与 a[i:] < b[i:] 一起使用? [复制]
【发布时间】:2019-04-21 15:50:02
【问题描述】:

阅读一些 Python 代码,我发现了这个语法 if a[i:] &lt; b[j:],冒号让我陷入了循环。我发现了这个很好的问题/答案:

Colon (:) in Python list index

但后来我回顾了我的代码示例,仍然不清楚它是如何使用我所理解的作为比较中拼接的快捷方式的。

我正在尝试将其逆向工程为 JavaScript 等效函数。这种奇怪的比较是我唯一无法理解的。 python到底在比较什么?字符串长度?还是别的什么?

def combineStrings(a, b):
    answer = ''
    a += '~'
    b += '~'
    i = 0
    j = 0
    while a[i] != '~' or b[j] != '~':
        print (i, a[i:], b[j:], a[i:] < b[j:])
        if a[i] != '~' and a[i:] < b[j:]:
            answer += a[i]
            i += 1
        else:
            answer += b[j]
            j += 1
    print (answer)

combineStrings('TACO', 'CAT')

输出

0 TACO~ CAT~ False
0 TACO~ AT~ False
0 TACO~ T~ True
1 ACO~ T~ True
2 CO~ T~ True
3 O~ T~ True
4 ~ T~ False
CATACOT

【问题讨论】:

  • 你到底想问什么?
  • @ddor254 我在问如何使用切片表示法来比较字符串? python会自动比较长度吗?还是在比较别的东西?
  • 别让最后一个冒号迷惑了你,它属于if语句。 a[i:]b[j:] 只是 a 从第 i 个索引到末尾的标准表示法。
  • 所以你的问题不是字符串切片,而是字符串比较。这是一个“简单”的字典比较...T == T,但a~...
  • 它是lexicographically comparing 子字符串。 TACO~ 在字典中会出现在 CAT~ 之后,但在 T~ 之前。

标签: python string-comparison


【解决方案1】:

比较Lexicographical Order

如果您试图在b (T) 中找到至少与a (T) 一样大的字符,并在a (A, C, O) 中插入所有连续的字母小于b 中的那个字符,这段代码有意义。

~ 是最大的可打印 ASCII 字符 (126),因此用作比较。

0 TACO~ AT~ False # because 'T' < 'A'
0 TACO~ T~ True   # because '~' > 'A'

【讨论】:

  • 惊呆了,谢谢!我从来没有尝试过像这样比较字符串,我刚刚了解到 JavaScript 也支持这种字符串。
  • 其实我一直以为字典是默认的...
  • 默认反对什么?
  • 我只用过Python、VBA和Java,它们都使用字典比较,所以我认为这很正常。
  • 很正常,我只是说我一直没用过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 2014-10-23
相关资源
最近更新 更多