2017-02-06 58 views
0

在这里,我有一个更大的程序的一部分,我正在努力。该功能正在查看一些输入电子邮件并按字母顺序排列。有没有一种方法可以让它只查看@domain之前的部分?目前我认为它正在查看整个输入电子邮件字符串。阅读字符串的一部分

def __lt__(self, other): 
    if (self.email < other.email): 
     return True 
    else: 
     return False 
+0

你有尝试过什么吗?我会建议研究字符串拆分。 –

回答

3

是:

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'@'迹象。

+1

只是为了我自己的知识,它会被普遍接受的编码习惯使用像这样的切片符号,而不是像'self.email.split('@')[0]'这样的字符串分割吗?他们应该在这种情况下产生相同的结果,但它们可能是一些特殊情况,其中一种方法比另一种我不知道的更好。 – tmwilson26

+2

@ tmwilson26:如果字符串没有**不包含“@”,则分割将仍然有效,而分割将失败。所以呀'分裂'可以更好。此外,由于您计算了所有拆分元素,而不仅仅是第一个(您实际上感兴趣),所以拆分(可以)在计算上更加昂贵。 –

+1

了解了这一点,明确了利用切片的好处。 – tmwilson26