我一直在尝试这些代码,但有些问题。我只想知道第一个字符串是否按字母顺序排列。
def alp(s1):
s2=sorted(s1)
if s2 is s1:
return True
else:
return False
这总是打印False,当我说打印s1或s2时,它说“NameError:name's1'未定义”
答案 0 :(得分:5)
is
是身份测试,用于比较对象ID,==
是相等测试:
In [1]: s1 = "Hello World"
In [2]: s2 = "Hello World"
In [3]: s1 == s2
Out[3]: True
In [4]: s1 is s2
Out[4]: False
另请注意,sorted
会返回一个列表,因此请将其更改为:
if ''.join(s2) == s1:
或者
if ''.join(sorted(s2)) == s1:
答案 1 :(得分:4)
我会使用iter
很好地获取上一个元素:
def is_ordered(ss):
ss_iterable = iter(ss)
try:
current_item = next(ss_iterable)
except StopIteration:
#replace next line to handle the empty string case as desired.
#This is how *I* would do it, but others would prefer `return True`
#as indicated in the comments :)
#I suppose the question is "Is an empty sequence ordered or not?"
raise ValueError("Undefined result. Cannot accept empty iterable")
for next_item in ss_iterable:
if next_item < current_item:
return False
current_item = next_item
return True
这个答案在绝对最坏的情况下具有复杂度O(n),而不是依赖于sort
的答案,即O(nlogn)。
答案 2 :(得分:4)
您可以看到this answer并使用适用于任何序列的内容:
all(s1[i] <= s1[i+1] for i in xrange(len(s1) - 1))
示例:
>>> def alp(s1):
... return all(s1[i] <= s1[i+1] for i in xrange(len(s1) - 1))
...
>>> alp("test")
False
>>> alp("abcd")
True
答案 3 :(得分:2)
确保将字符串与字符串进行比较:
In [8]: s = 'abcdef'
In [9]: s == ''.join(sorted(s))
Out[9]: True
In [10]: s2 = 'zxyw'
In [11]: s2 == ''.join(sorted(s2))
Out[11]: False
如果s1
或s2
是字符串,sorted
将返回一个列表,然后您将比较字符串与列表。为了进行你想要的比较,使用''.join()
将获取列表并将所有元素连接在一起,基本上创建一个表示已排序元素的字符串。
答案 4 :(得分:1)
使用类似的东西:
sorted()
返回一个列表,您正在尝试将列表与字符串进行比较,因此请先将该列表更改为字符串:
In [21]: "abcd"=="".join(sorted("abcd"))
Out[21]: True
In [22]: "qwerty"=="".join(sorted("qwerty"))
Out[22]: False
#comparsion of list and a string is False
In [25]: "abcd"==sorted("abcd")
Out[25]: False