【问题标题】:Python using index to check in listPython使用索引签入列表
【发布时间】:2019-04-02 13:22:43
【问题描述】:

我正在编写一个脚本,其目标是检查每个国家/地区 (country) 并根据索引是否存在 supply 列表中的条目。目标是打印出每个国家/地区的条目是否存在。

国家:

country=['usa', 'poland', 'australia', 'china']

用于检查country 中的每个项目到supply 的索引。

# index
water_country=water_<country>_country
gas_state=gas_<country>_state
oil_city=oil_<country>_city   

供应:

supply=['water_usa_country', 'gas_usa_state', 'oil_usa_city', 'water_poland_country', 'gas_poland_city', 'gas_australia_state']  

对于上述情况,结果将出现在每个国家/地区的列表中:

For country 'usa' all entries exist

For country 'poland' following entries does not exist:
oil_poland_city

For country 'australia' following entries does not exist:
water_australia_country
oil_australia _city   

For country 'china' following entries does not exist:
water_china_country
gas_china_state
oil_china_city  

【问题讨论】:

  • 为什么首先将此类信息存储为字符串?这看起来像是 dicts 的工作,命名为元组甚至是类。

标签: python python-3.x python-2.7 list compare


【解决方案1】:

这将起作用:

countries = ['usa', 'poland', 'australia', 'china']
search_strings = ['water_{}_country', 'gas_{}_state', 'oil_{}_city']
supply = ['water_usa_country', 'gas_usa_state', 'oil_usa_city', 'water_poland_country', 'gas_poland_city', 'gas_australia_state']

for country in countries:
    missing = [search_string.format(country) for search_string in search_strings if search_string.format(country) not in supply]
    if missing:
        missing_string = '\n'.join(missing)
        print(f"For country '{country}' the following entries do not exist:\n{missing_string}\n")

    else:
        print(f"For country '{country}' all entries exist.\n")

输出:

For country 'usa' all entries exist.

For country 'poland' the following entries do not exist:
gas_poland_state
oil_poland_city

For country 'australia' the following entries do not exist:
water_australia_country
oil_australia_city

For country 'china' the following entries do not exist:
water_china_country
gas_china_state
oil_china_city

【讨论】:

    【解决方案2】:

    您可以简单地遍历每个国家/地区的所有供应品并检查哪些供应品得到满足,并将未满足的供应品添加到某个列表中,这里的值为missing_supplies

    country = ['usa', 'poland', 'australia', 'china']
    index = ['water_<country>_country', 'gas_<country>_state', 'oil_<country>_city']
    supply = ['water_usa_country', 'gas_usa_state', 'oil_usa_city', 'water_poland_country', 'gas_poland_city', 'gas_australia_state']
    
    missing_supplies = {}
    
    for c in country:
        missing_supplies[c] = []
        for i in index:
            if i.replace('<country>', c) not in supply:
                missing_supplies[c].append(i.replace('<country>', c))
    
    for c in country:
        if not missing_supplies[c]:
            print('For country \'{}\' all entries exist'.format(c))
        else:
            print('For country \'{}\' following entries does not exist:'.format(c))
            for v in missing_supplies[c]:
                print(v)
        print()
    

    输出:

    For country 'usa' all entries exist
    
    For country 'poland' following entries does not exist:
    gas_poland_state
    oil_poland_city
    
    For country 'australia' following entries does not exist:
    water_australia_country
    oil_australia_city
    
    For country 'china' following entries does not exist:
    water_china_country
    gas_china_state
    oil_china_city
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      相关资源
      最近更新 更多