在这里,我有一个更大的程序的一部分,我正在努力。该功能正在查看一些输入电子邮件并按字母顺序排列。有没有一种方法可以让它只查看@domain之前的部分?目前我认为它正在查看整个输入电子邮件字符串。阅读字符串的一部分
def __lt__(self, other):
if (self.email < other.email):
return True
else:
return False
在这里,我有一个更大的程序的一部分,我正在努力。该功能正在查看一些输入电子邮件并按字母顺序排列。有没有一种方法可以让它只查看@domain之前的部分?目前我认为它正在查看整个输入电子邮件字符串。阅读字符串的一部分
def __lt__(self, other):
if (self.email < other.email):
return True
else:
return False
是:
def __lt__(self, other):
return self.email[:self.email.index('@')] < other.email[:other.email.index('@')]
给出总有email
一个'@'
。
在这里,我们切片工作:我们确定其中'@'
符号放置.index('@')
指数,我们用[:...]
切片达(但不包括)的'@'
标志。所以:
>>> email='[email protected]'
>>> email[:email.index('@')]
'foo'
然后我们简单地计算是否“我们的” '@'
号前部分小于一部分的other
的'@'
迹象。
只是为了我自己的知识,它会被普遍接受的编码习惯使用像这样的切片符号,而不是像'self.email.split('@')[0]'这样的字符串分割吗?他们应该在这种情况下产生相同的结果,但它们可能是一些特殊情况,其中一种方法比另一种我不知道的更好。 – tmwilson26
@ tmwilson26:如果字符串没有**不包含“@”,则分割将仍然有效,而分割将失败。所以呀'分裂'可以更好。此外,由于您计算了所有拆分元素,而不仅仅是第一个(您实际上感兴趣),所以拆分(可以)在计算上更加昂贵。 –
了解了这一点,明确了利用切片的好处。 – tmwilson26
你有尝试过什么吗?我会建议研究字符串拆分。 –