如何检查列表中的字符是否在给定集合中?

时间:2017-10-29 20:13:28

标签: python string set

给出Python中的一组有效字符:

valid_chars = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "-", "."}

我试图找出两个字符串是否只由集合中的字符组成,如果没有,该方法将返回False。

for char in zip(latitude, longitude):
    if char not in valid_chars:
        return False

乍一看,我会说这段代码应该可以正常工作,但无论我输入哪个字符串,方法都会返回False。这里有什么我想念的吗?

编辑:将提供有关我正在尝试做的更多信息:该方法应通过检查纬度和经度中是否存在无效字符来检查坐标字符串是否有效。

以下是该方法应该收到的示例:

is_valid_coordinates("24.53525235, 23.45235") => True
is_valid_coordinates("0.342q0832, 1.2324") => False

这就是我从给定参数中得到纬度和经度的方法:

latitude = coordinates[:coordinates.index(',')]
longitude = coordinates[coordinates.index(',') + 2:]

5 个答案:

答案 0 :(得分:1)

zip返回一个元组,但你的集合中不包含任何字符元组,所以没有机会这样做。

OTOH,您可以使用内置all检查所有中每个元组中的项是否包含

...
for chr1, chr2 in zip(latitude, longitude):
    if chr1 not in valid_chars or chr2 not in valid_chars:
        return False

但是,我不确定为什么你首先需要zip。如果您需要遍历两个迭代中的所有项目,可以使用itertools.chain

from itertools import chain

for char in chain(latitude, longitude):
    if char not in valid_chars:
        return False

<强>更新

您可以尝试将值解析为浮点值,看看是否有效:

...
try:
   lat, lon = "24.53525235, 23.45235".split(",")
   float(lat), float(lon)
except ValueError:
   return False
else:
   return True

答案 1 :(得分:1)

您可以使用

all(set(word) <= valid_chars for word in [longitude, latitude])

set(word)将字符串映射到其字符集,<=是子集条件。

注意:您应该将valid_chars中的数字转换为字符串,即"1"而不是1,以使其正常工作。

答案 2 :(得分:0)

首先,您应该将zip与两个变量一起使用;

for char1,char2 in zip(latitude, longitude):

这样,纬度元素将通过其索引与经度元素匹配。因此,每char1}与char2匹配。

然后检查它们是否在特定列表中;

if char1 not in valid_chars or char2 not in valid_chars:
    return false

如果char1char2不在valid_chars,则会返回false。

答案 3 :(得分:0)

正如其他答案所指出的那样,zip的结果中的每一项都是一对。

Insead,连接列表以获得所需的行为:

for char in longitude + latitude:
    if char not in valid_chars:
        return False

答案 4 :(得分:0)

首先需要在valid_chars中提供字符:

valid_chars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', "-", "."}

然后您的方法的代码可以如下:

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()