How to check if a character from a list is in a given set?
在python中给定一组有效字符:
1 | valid_chars = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,"-","."} |
我试图找出两个字符串是否只由集合中的字符组成,如果不是,该方法将返回false。
1 2 3 | for char in zip(latitude, longitude): if char not in valid_chars: return False |
号
乍一看,我会说这段代码应该工作得很好,但是无论我输入哪一个字符串,这个方法总是返回false。我这里有什么东西不见了吗?
编辑:提供更多关于我要做什么的信息:方法应该通过检查纬度和经度中是否有无效字符来检查一个坐标串是否有效。
下面是该方法应接收的内容的示例:
1 2 | is_valid_coordinates("24.53525235, 23.45235") => True is_valid_coordinates("0.342q0832, 1.2324") => False |
这就是我如何从给定参数得到纬度和经度的方法:
1 2 | latitude = coordinates[:coordinates.index(',')] longitude = coordinates[coordinates.index(',') + 2:] |
。
你可以用
1 | all(set(word) <= valid_chars for word in [longitude, latitude]) |
。
注意:您应该将
另外,您可以使用内置的EDOCX1[1]检查每个元组中的所有项是否都包含在其中:
1 2 3 4 | ... for chr1, chr2 in zip(latitude, longitude): if chr1 not in valid_chars or chr2 not in valid_chars: return False |
但是,我不知道你为什么首先需要
1 2 3 4 5 | from itertools import chain for char in chain(latitude, longitude): if char not in valid_chars: return False |
号
更新
您可以尝试将这些值解析为浮点数,并查看其是否有效:
1 2 3 4 5 6 7 8 | ... try: lat, lon ="24.53525235, 23.45235".split(",") float(lat), float(lon) except ValueError: return False else: return True |
首先,您需要在有效字符中提供字符:
1 | valid_chars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',"-","."} |
。
然后,方法的代码可以如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 | def isvalid_coordinates(str): valid_chars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',"-","."} coords=str.split(",") cooncatenation=coords[0]+coords[1] for char in cooncatenation: if char not in valid_chars: return False; return True; def main(): print isvalid_coordinates("24.53525235, 23.45235") print isvalid_coordinates("0.342q0832, 1.2324") if __name__ =="__main__": main() |
正如其他答案所指出的,你的
插入,连接列表以获得所需的行为:
1 2 3 | for char in longitude + latitude: if char not in valid_chars: return False |
首先,您应该使用带有两个变量的
埃多克斯1〔5〕
这样,纬度元素将通过其索引与经度元素匹配。所以每一个
然后检查它们是否在那个特定的列表中;
1 2 | if char1 not in valid_chars or char2 not in valid_chars: return false |
。
如果