Python isinstance无法与if语句一起使用。

时间:2018-08-22 18:17:12

标签: python list isinstance

我有一个地址列表。一些地址包含街道,城市,州,邮编,而其他地址仅包含城市,州和邮编。我做了一个for循环,将每个元素放入一个单独的变量中。问题是我没有得到正确的输出,所以我在if中放置了isinstance(address[3], int]语句,我这样做是为了检查第4个元素是否在那里然后执行代码,但是它不能正常工作。我将在下面发布内容以显示我在做什么,并让我知道我在哪里搞砸了。第一个地址有一条街道,第二个地址没有一条街道,因此我想用“-”代替地址。

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]

4 个答案:

答案 0 :(得分:1)

您有基本正确的想法。我认为最大的问题是if语句中的条件,因为address[3]只有3个元素时会引发异常。相反,您应该使用len()检查列表的长度。如果列表的长度为3,则仅会得到城市,州和邮政编码,并将其压缩到正确的变量中。如果列表的长度为4,则将获得所有4个字段。

答案 1 :(得分:1)

第一行

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]

答案 2 :(得分:1)

您的代码有多个问题。.首先,syn是一个长度为1的列表的列表。其次,如果您想检查地址中是否包含邮政编码,您的两个示例都可以,但是您不能将它们与其他数据分开访问,因为当前数据已存储为String。尝试分离元素,然后将它们实际存储为String或int。下一个问题是您无法检查不存在的元素。如果您知道其他数据必须存在,则可以检查列表的长度。总之,请使用以下更改:

address

答案 3 :(得分:0)

首先,您需要在,处分割地址,然后检查长度并将部分分配给值:

adress = '123 street name, New Orleans, LA, 12345'
parts = address.split(', ')
street, city, state, zip_code = parts if len(parts) == 4 else ['-'] + parts