Python isinstance 不适用于 if 语句。
Python isinstance not working with if statement.
我有一个地址列表。有些地址有街道、城市、州、邮政编码,而其他地址只有城市、州和邮政编码。我做了一个 for
循环,将每个元素放入一个单独的变量中。问题是我没有得到正确的输出,所以我用 isinstance(address[3], int]
放置了一个 if
语句,我这样做是为了检查第 4 个元素是否存在,然后执行代码,但它就是不工作。我将在下面 post 展示我在做什么,并让我知道我哪里搞砸了。第一个地址有街道,第二个没有,所以我想用“-”代替地址。
address = [['123 street name, New Orleans, LA, 12345'],['New Orleans, LA, 12345']]
if isinstance(address[3], int):
street = address[0]
city = address[1]
city = city.lstrip()
state = address[2]
state = state.lstrip()
zip_code = address[3]
else:
street = "-"
city = address[0]
city = city.lstrip()
state = address[1]
state = state.lstrip()
zip_code = address[2]
你的想法基本正确。我认为最大的问题是你的 if 语句中的条件,因为 address[3]
当只有 3 个元素时会抛出异常。相反,您应该使用 len()
检查列表的长度。如果列表的长度为 3,那么您只能将城市、州和邮政编码放入正确的变量中。如果列表的长度为 4,那么您将获得所有 4 个字段。
第一行
address = [['123 street name, New Orleans, LA, 12345'],['New Orleans, LA, 12345']]
实际上具有制作列表列表的效果,其中每个内部列表包含一个字符串。我想如果你这样写可能会有更好的影响:
addresses = [['123 street name', 'New Orleans', 'LA', '12345'],['New Orleans', 'LA', '12345']]
要检查这些字段是否存在,我会尝试
for address in addresses:
if len(address) == 4:
//case 1
else:
//case 2
如果您不想麻烦地分解字符串,以下行将转换您的地址:
addresses = [address.split(', ') for address in addresses]
您的代码存在多个问题.. 首先 address
是一个长度为 1 的列表列表。其次,如果您想检查地址是否包含邮政编码,您的两个示例都包含邮政编码,但是您不能将它们与其他数据分开访问,因为它现在存储为字符串。尝试分离元素并将它们实际存储为字符串或整数。下一个问题是您无法检查不存在的元素。如果您知道其他数据必须存在,您可以检查列表的长度。总之,使用这些更改:
addresses = [['123 street name', 'New Orleans', 'LA', 12345],['New Orleans', 'LA', 12345]]
for address in addresses:
if len(address) > 3:
street = address[0]
city = address[1]
city = city.lstrip()
state = address[2]
state = state.lstrip()
zip_code = address[3]
else:
street = "-"
city = address[0]
city = city.lstrip()
state = address[1]
state = state.lstrip()
zip_code = address[2]
首先您需要在 ,
拆分您的地址,然后检查长度并将各部分分配给值:
adress = '123 street name, New Orleans, LA, 12345'
parts = address.split(', ')
street, city, state, zip_code = parts if len(parts) == 4 else ['-'] + parts
我有一个地址列表。有些地址有街道、城市、州、邮政编码,而其他地址只有城市、州和邮政编码。我做了一个 for
循环,将每个元素放入一个单独的变量中。问题是我没有得到正确的输出,所以我用 isinstance(address[3], int]
放置了一个 if
语句,我这样做是为了检查第 4 个元素是否存在,然后执行代码,但它就是不工作。我将在下面 post 展示我在做什么,并让我知道我哪里搞砸了。第一个地址有街道,第二个没有,所以我想用“-”代替地址。
address = [['123 street name, New Orleans, LA, 12345'],['New Orleans, LA, 12345']]
if isinstance(address[3], int):
street = address[0]
city = address[1]
city = city.lstrip()
state = address[2]
state = state.lstrip()
zip_code = address[3]
else:
street = "-"
city = address[0]
city = city.lstrip()
state = address[1]
state = state.lstrip()
zip_code = address[2]
你的想法基本正确。我认为最大的问题是你的 if 语句中的条件,因为 address[3]
当只有 3 个元素时会抛出异常。相反,您应该使用 len()
检查列表的长度。如果列表的长度为 3,那么您只能将城市、州和邮政编码放入正确的变量中。如果列表的长度为 4,那么您将获得所有 4 个字段。
第一行
address = [['123 street name, New Orleans, LA, 12345'],['New Orleans, LA, 12345']]
实际上具有制作列表列表的效果,其中每个内部列表包含一个字符串。我想如果你这样写可能会有更好的影响:
addresses = [['123 street name', 'New Orleans', 'LA', '12345'],['New Orleans', 'LA', '12345']]
要检查这些字段是否存在,我会尝试
for address in addresses:
if len(address) == 4:
//case 1
else:
//case 2
如果您不想麻烦地分解字符串,以下行将转换您的地址:
addresses = [address.split(', ') for address in addresses]
您的代码存在多个问题.. 首先 address
是一个长度为 1 的列表列表。其次,如果您想检查地址是否包含邮政编码,您的两个示例都包含邮政编码,但是您不能将它们与其他数据分开访问,因为它现在存储为字符串。尝试分离元素并将它们实际存储为字符串或整数。下一个问题是您无法检查不存在的元素。如果您知道其他数据必须存在,您可以检查列表的长度。总之,使用这些更改:
addresses = [['123 street name', 'New Orleans', 'LA', 12345],['New Orleans', 'LA', 12345]]
for address in addresses:
if len(address) > 3:
street = address[0]
city = address[1]
city = city.lstrip()
state = address[2]
state = state.lstrip()
zip_code = address[3]
else:
street = "-"
city = address[0]
city = city.lstrip()
state = address[1]
state = state.lstrip()
zip_code = address[2]
首先您需要在 ,
拆分您的地址,然后检查长度并将各部分分配给值:
adress = '123 street name, New Orleans, LA, 12345'
parts = address.split(', ')
street, city, state, zip_code = parts if len(parts) == 4 else ['-'] + parts