Python isinstance不使用if语句。

2024-04-24 08:41:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份地址清单。有些地址有street,city,state,zip,而有些地址只有city、state和zip。我做了一个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]

Tags: 元素streetcitynewifaddress地址code
3条回答

您的代码有多个问题。。首先,address是一个长度为1的列表。第二,如果您想检查地址是否包含邮政编码,两个示例都有,但是您不能将它们与其他数据分开访问,因为它现在是以字符串形式存储的。尝试分离元素,并实际将它们存储为字符串或int。下一个问题是不能检查不存在的元素。如果您知道其他数据必须存在,可以检查列表的长度。总之,请使用以下更改:

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]

第一行

address = [['123 street name, New Orleans, LA, 12345'],['New Orleans, LA, 12345']]

实际上有一个列表列表的效果,其中每个内部列表包含一个字符串。我认为如果你写下以下内容,效果会更好:

^{pr2}$

为了检查这些字段是否存在,我会尝试

for address in addresses:
    if len(address) == 4:
        //case 1
    else:
        //case 2

如果您不想费心分解字符串,以下行将转换您的地址:

addresses = [address.split(', ') for address in addresses]

你的想法基本正确。我认为最大的问题是if语句中的条件,因为当只有3个元素时,address[3]将引发异常。相反,您应该使用len()检查列表的长度。如果列表的长度为3,那么您只需将city、state和zip放入正确的变量中。如果列表的长度为4,那么您将得到所有4个字段。在

相关问题 更多 >