Python for循环和if to在文本中查找字符串



我想使用for循环,如果要找出同样在收费公路中的空列表中的元素,并将收费公路中元素附加到新列表Tollroads 中

tollroad = ['Aberdeen Tunnel', 'Lion Rock Tunnel', 'Shing Mun Tunnels','Tseung Kwan O Tunnel', 'Tsing Sha Highway','Cross Harbour Tunnel',
'Eastern Harbour Crossing','Western Harbour Crossing', 'Tate's Cairn Tunnel', 'Tai Lam Tunnel', 'Lantau Link']
Emptylists = ['租庇利街 Jubilee Street', '德輔道中 Des Voeux Road Central', '摩利臣街 Morrison Street', '干諾道西 Connaught Road West','西區海底隧道 Western Harbour Crossing', '西九龍公路 West Kowloon Highway', '海寶路 Hoi Po Road', '海寶路 Hoi Po Road','連翔道 Lin Cheung Road','荔寶路 Lai Po Road',]

我的代码在下面,但什么都没有创建:

Emptylists

tollroad = ['Aberdeen Tunnel', 'Lion Rock Tunnel', 'Shing Mun Tunnels','Tseung Kwan O Tunnel', 'Tsing Sha Highway','Cross Harbour Tunnel',
'Eastern Harbour Crossing','Western Harbour Crossing', 'Tate's Cairn Tunnel', 'Tai Lam Tunnel', 'Lantau Link']
Tollroads=[]
for Emptylist in Emptylists:
if Emptylist in tollroad:
Tollroads.append(tollroad)
Tollroads

您的检查if Emptylist in tollroad不正确。您应该检查Emptylist是否包含tollroads的任何。此外,您的变量名很尴尬,请不要以大写字母开头变量名。

[road for road in Emptylists if any(tr in road for tr in tollroad)]
#['西區海底隧道 Western Harbour Crossing']

另一种方法是使用数据规范化和设置操作:

  1. 标准化数据

    import re
    def normalize_name(text):
    # remove leading non-latin characters if present
    return ''.join(re.split('([A-Z])', text, 1)[1:]).lower()
    
  2. 则可以使用set.intersection操作。

    >>> tollroad = ['Aberdeen Tunnel', 'Lion Rock Tunnel', 'Shing Mun Tunnels','Tseung Kwan O Tunnel', '
    ... Tsing Sha Highway','Cross Harbour Tunnel',
    ... 'Eastern Harbour Crossing','Western Harbour Crossing', 'Tate's Cairn Tunnel', 'Tai Lam Tunnel',
    ...  'Lantau Link']
    ...
    ... Emptylists = ['???? Jubilee Street', '???? Des Voeux Road Central', '???? Morrison S
    ... treet', '???? Connaught Road West','?????? Western Harbour Crossing', '????? West
    ...  Kowloon Highway', '??? Hoi Po Road', '??? Hoi Po Road','??? Lin Cheung Road','??? L
    ... ai Po Road',]
    >>> tollroad = set(normalize_name(name) for name in tollroad)
    >>> Emptylists = set(normalize_name(name) for name in Emptylists)
    >>> tollroad.intersection(Emptylists)
    {'western harbour crossing'}
    

这就是你要做的。我同意,不会在变量中混合大写,除非它们表示额外的重要性。

Tollroads = []
for Emptylist in Emptylists:
head, tail = Emptylist .split(' ', 1)
if tail in tollroad: Tollroads .append( tail )
print( Tollroads )

最新更新