为了账号安全,请及时绑定邮箱和手机立即绑定

将子字符串与 2 个列表的字符串进行匹配

将子字符串与 2 个列表的字符串进行匹配

繁星coding 2023-08-15 17:26:58
当我遇到问题时,我正在尝试编写工作代码。我的目标是找到位于特定地区的企业。我有两个清单。第一个列表的项目类似于“城市计数企业名称”,包含我们县的所有城市,而第二个列表的项目类似于“城市”,包含我们地区的所有城市。我想比较这些列表,以便获得我们地区的所有企业,结果如“城市计数企业名称”。这是我的代码:jVal = "|".join(A)  print([i for i in B if i in jVal ])我也尝试过这个:for item1 in A:for item2 in B:    if item1 == item2:        print(item1)但两者都不起作用,我要么根本没有得到任何结果,要么得到整个“A”。任何帮助将不胜感激!
查看完整描述

5 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

根据我对您的列表内容的理解,您可以使用如下内容:


businesses = ["C1 count B1", "C2 count B2", "C1 count B3"]

cities = ["C1","C3","C4"]


output = [a for a in businesses if a.split()[0] in cities]

print(output)

假设空格分隔第一个列表中每个项目的组成部分,则会产生:


['C1 count B1', 'C1 count B3']


查看完整回答
反对 回复 2023-08-15
?
www说

TA贡献1775条经验 获得超8个赞

您错过了内部for循环的缩进


for item1 in A:

  for item2 in B:

    if item1 == item2:

        print(item1)

或者您可以使用setif 两个列表中的值都是单个单词来执行此操作


list(set(A).intersection(set(B)))

从你的问题来看,它是列表中单词的组合


businesses = ["C1 count B1", "C2 count B2", "C1 count B3"]

cities = ["C1","C3","C4"]


for city in cities:

  for business in businesses:

    if city in business.split():

      print(city, business)


查看完整回答
反对 回复 2023-08-15
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

for local_city in list_of_cities_in_our_district:

  for entry in list_of_city_county_business:

    if entry's city matches local_city:

        print the business name

这是一些伪代码,应该可以完成您想要的操作...我将语义细节留给您,用于解析列表的布局等。


查看完整回答
反对 回复 2023-08-15
?
跃然一笑

TA贡献1826条经验 获得超6个赞

鉴于所提供的数据文件中的数据格式不完美,以下代码可能会工作得更好。它还有一个额外的优点,即按照城市在 cars.txt 文件中出现的顺序按城市对结果进行分组。


with open('Cities.txt', encoding='utf-8') as f: cities = f.read().split('\n')

cities = [x.strip() for x in cities if x]


with open('Businesses.txt', encoding='utf-8') as f: businesses = f.read().split('\n')

businesses = [x for x in businesses if x]


found = 0

for c in cities:

    for b in businesses:

        if b.startswith(c):

            found += 1

            print(b)


print(f'Found {found} businesses')


查看完整回答
反对 回复 2023-08-15
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

完整的解决方案,由于非结构化数据需要大量格式化。


with open("Businesses.txt", mode='r') as f:

    listBusinesses = f.readlines()

with open("Cities.txt", mode='r') as f:

        listCities = f.readlines()


Cities = []

for values in listCities:

    if len(values.split('\n')[0]) > 0:

        Cities.append(values.split('\n')[0])


CityNames = []

BusinessNames = []

SerialNo = []


for values in listBusinesses:

    if len(values.split('\n')[0]) > 0:


        vCityNames = values.split('\n')[0][:26].strip()

        CityNames.append(vCityNames)


        vSerialWithBusiness = values.split('\n')[0][26:].strip()

        if len(vSerialWithBusiness.split('\n')[0].split('.')) > 1:

            vSerialNo = (vSerialWithBusiness.split('\n')[0].split('.')[0].strip())

            SerialNo.append(vSerialNo)

            vBusinessNames = (vSerialWithBusiness.split('\n')[0].split('.')[1].strip())

        else:

            vBusinessNames = (vSerialWithBusiness.split('\n')[0].split('.')[0].strip())

            SerialNo.append('Missing')

        BusinessNames.append(vBusinessNames)


assert len(CityNames) == len(SerialNo) == len(BusinessNames)


count = 0

for x  in range(len(Cities)):

    for y in range(len(CityNames)):

        if Cities[x] == CityNames[y]:

            count = count + 1

        print(Cities[x].ljust(27,' ') ,SerialNo[y].ljust(7,' '), BusinessNames[y])


# Total Businesses 3488,  matching Cities 345


查看完整回答
反对 回复 2023-08-15
  • 5 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信