【问题标题】:Get combined array value from array with single value, that matches with another array with combined value从具有单个值的数组中获取组合数组值,该数组与另一个具有组合值的数组匹配
【发布时间】:2020-06-22 15:19:12
【问题描述】:

我有一个具有以下格式的单个值数组:
['apple', 'banana', 'potato', 'jelly', 'orange']

还有另一个具有以下格式的数组:
['apple banana', 'jelly orange']

并且想要在第一个数组序列值与第二个数组值匹配时输出:

苹果香蕉
果冻橙

这使得以下案例没有完成: ['apple', 'banana', 'jelly', 'potato', 'orange']
仅输出

苹果香蕉

我尝试了一些使用 python 的实现,但仍然无法按预期工作。
我尝试的是遍历第一个数组,并尝试将每个值与第二个数组匹配,但我似乎无法将循环外的值保存为预期输出。 任何建议将不胜感激

编辑: 我还需要它来涵盖第二个数组包含超过 2 个字符串的情况,例如第二个数组 => ["apple banana potato jelly"] 仍将输出
“applebanana potato jelly”

【问题讨论】:

  • 所以您只想打印第二个数组中由第一个数组中的相邻元素组成的项目?
  • @JohnGordon 是的。抱歉描述太复杂了

标签: python arrays loops logic


【解决方案1】:

你可以试试这样的:

#Case
a=['apple', 'banana', 'jelly', 'potato', 'orange']
b=['apple banana', 'jelly orange']
    
c=[i+' '+i1 for i,i1 in zip(a,a[1:]) if i+' '+i1 in b ]

>>>['apple banana']

#Second case
a=['apple', 'banana', 'potato','jelly' , 'orange']
b=['apple banana', 'jelly orange']
    
c=[i+' '+i1 for i,i1 in zip(a,a[1:]) if i+' '+i1 in b ]

>>>['apple banana', 'jelly orange']

【讨论】:

    【解决方案2】:

    您可以使用zip 获取成对的值。从这里我们只需要检查它们是否在匹配中被空格连接。

    def fn(values, matches):
        matches = set(matches)
        rets = []
        for prev, curr in zip(values, values[1:]):
            value = prev + ' ' + curr
            if value in matches:
                rets.append(value)
        return rets
    
    fn(['apple', 'banana', 'potato', 'jelly', 'orange'], ['apple banana', 'jelly orange'])
    # ['apple banana', 'jelly orange']
    fn(['apple', 'banana', 'jelly', 'potato', 'orange'], ['apple banana', 'jelly orange'])
    # ['apple banana']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      相关资源
      最近更新 更多