【问题标题】:Get the length of certain values from list从列表中获取某些值的长度
【发布时间】:2021-02-23 20:11:04
【问题描述】:

我想获取list 中某些值的长度,例如:

lst=['ID_CYTY', 'CITY', 'ID_STATE', 'STATE', 'ID_COUNTRY', 'COUNTRY', 'AGE', 'SEX', 'NAME', 'P', 'A1', 'PR', 'V', 'Z', 'M1', 'D1', 'R1', 'CPD', 'CA', 'IN', 'ND', 'I', 'C', 'W', 'NZ', 'EG', 'LOS', 'TO', 'LS', 'EST', 'TR', 'OBS', 'RUT']

我只有另一个列表,例如:

lst2=['P', 'A1', 'PR', 'V', 'Z', 'M1', 'D1', 'R1', 'CPD', 'CA', 'IN', 'ND', 'I', 'C', 'W']

我想获取lst2 之前和之后的值的长度,这些值在lst 中,但这里的问题是lst 的长度可能从ID_CITY 更改为NAMENZRUT,我的意思是在PW 之后可能会有更多或更少的字符串。此外,不必使用字符串的names,因为它们可能与从 0 索引到最后一个索引不同,例如:

lst=['CITY', 'ID_STATE', 'STATE', 'ID_COUNTRY', 'COUNTRY', 'AGE', 'SEX', 'A1', 'P', 'PR', 'V', 'Z', 'M1', 'D1', 'R1', 'CPD', 'CA', 'W', 'ND', 'I', 'C', 'IN', 'NZ', 'LOS', 'TO', 'LS', 'EST', 'TR', 'OBS']

我相信可以获取lst2 中的length,然后进行一些列表索引以在lst 中获取lengths

lst2 可以混合使用它们的字符串,但这没关系,因为无论以这些字符串开头还是结尾,它都必须具有从 PW 的相同扩展名。

注意:我想在单个列表中的lst 中获取lst2 之前和之后的值。

我在lst2 内部lst 之前和之后的意思是: 在第一种情况下,它将是: length 之前的PW

9

lengthNZRUT

9

但这可能与我之前提到的不同。

【问题讨论】:

  • python lst2 = list(filter(lambda n: len(name) <= 3, lst))
  • lst2 之前和之后是什么意思。请添加输入和相应的输出?还包括您编写的任何代码
  • 你的问题很不清楚你到底想要什么?
  • @DaniMesejo 看起来lst2lst 的子列表,所以他希望lst 的部分在该子列表之外。
  • 但是,列表中的新项目是什么,这仍然让我感到困惑。 @Barmar

标签: python list


【解决方案1】:
#lst=['ID_CYTY', 'CITY', 'ID_STATE', 'STATE', 'ID_COUNTRY', 'COUNTRY', 'AGE', 'SEX', 'NAME', 'P', 'A1', 'PR', 'V', 'Z', 'M1', 'D1', 'R1', 'CPD', 'CA', 'IN', 'ND', 'I', 'C', 'W', 'NZ', 'EG', 'LOS', 'TO', 'LS', 'EST', 'TR', 'OBS', 'RUT']
lst=['CITY', 'ID_STATE', 'STATE', 'ID_COUNTRY', 'COUNTRY', 'AGE', 'SEX', 'A1', 'P', 'PR', 'V', 'Z', 'M1', 'D1', 'R1', 'CPD', 'CA', 'W', 'ND', 'I', 'C', 'IN', 'NZ', 'LOS', 'TO', 'LS', 'EST', 'TR', 'OBS']
lst2=['P', 'A1', 'PR', 'V', 'Z', 'M1', 'D1', 'R1', 'CPD', 'CA', 'IN', 'ND', 'I', 'C', 'W']

for i in lst:
    if i in lst2:
        start = lst.index(i)
        break
for i in lst[::-1]:
    if i in lst2:
        end = lst.index(i)
        break

print(len(lst[:start]))
print(len(lst[end:-1]))

现在,即使两个列表都发生了变化,它也会找到要计算的第一个和最后一个值

【讨论】:

    【解决方案2】:
    lst=['ID_CYTY', 'CITY', 'ID_STATE', 'STATE', 'ID_COUNTRY', 'COUNTRY', 'AGE', 'SEX', 'NAME', 'P', 'A1', 'PR', 'V', 'Z', 'M1', 'D1', 'R1', 'CPD', 'CA', 'IN', 'ND', 'I', 'C', 'W', 'NZ', 'EG', 'LOS', 'TO', 'LS', 'EST', 'TR', 'OBS', 'RUT']
    lst2=['P', 'A1', 'PR', 'V', 'Z', 'M1', 'D1', 'R1', 'CPD', 'CA', 'IN', 'ND', 'I', 'C', 'W']
    
    start = lst.index(lst2[0])
    end = lst.index(lst2[-1])
    
    print(len(lst[:start]))
    print(len(lst[end:-1]))
    
    >>>
    9
    9
    >>>
    

    即使列表发生变化,它仍然会返回差异

    lst=['CITY', 'ID_STATE', 'STATE', 'ID_COUNTRY', 'COUNTRY', 'AGE', 'SEX', 'A1', 'P', 'PR', 'V', 'Z', 'M1', 'D1', 'R1', 'CPD', 'CA', 'W', 'ND', 'I', 'C', 'IN', 'NZ', 'LOS', 'TO', 'LS', 'EST', 'TR', 'OBS']
    
    >>>
    8
    11
    >>>
    

    【讨论】:

    • 但是如果lst2 发生变化或者它们的值混合了怎么办?我的意思是如果不是以P 开头或以另一个字符串结尾。 @亚历山大
    【解决方案3】:

    这就是评论 '我的想法是首先获取 len(lst2),然后进行一些字符串索引以获取不同变量中的第一个和最后一个值。 lst2 的 len 总是 lst 的一个部分或幻灯片。 ——' 说。

    lst=['ID_CYTY', 'CITY', 'ID_STATE', 'STATE', 'ID_COUNTRY', 'COUNTRY', 'AGE', 'SEX', 'NAME', 'P', 'A1', 'PR', 'V', 'Z', 'M1', 'D1', 'R1', 'CPD', 'CA', 'IN', 'ND', 'I', 'C', 'W', 'NZ', 'EG', 'LOS', 'TO', 'LS', 'EST', 'TR', 'OBS', 'RUT']
    lst2=['P', 'A1', 'PR', 'V', 'Z', 'M1', 'D1', 'R1', 'CPD', 'CA', 'IN', 'ND', 'I', 'C', 'W']
    
    legnth_1= len(lst[:lst.index(lst2[0])])
    legnth_2 =  len(lst[lst.index(lst2[-1])+1:])
    
    print(legnth_1)
    print(legnth_2)
    
    
    >>> 9
    >>> 9
    
    

    【讨论】:

    • 我不认为他想要组合长度,他想要分别在lst2 之前和之后的部分的长度。
    • 是的,而且我不需要指定任何名称索引,因为它可以混合使用。
    • 那么我们是怎么知道索引在哪里的呢?我们用什么来确定索引
    • 感谢更新。最后,我认为它工作正常。我会尝试其他一些时间,但它似乎工作得很好@coderoftheday
    【解决方案4】:

    请参阅Python: return the index of the first element of a list which makes a passed function true,了解如何在与条件匹配的第一个元素的列表中查找索引。

    在这种情况下,lst2 之前的列表长度是lst2 中第一个元素的索引。

    before = next(i for i,v in enumerate(lst) if v in lst2)
    

    要获取lst2 之后的列表长度,请执行相同操作,但先反转lst

    after = next(i for i,v in enumerate(lst[::-1]) if v in lst2)
    

    【讨论】:

    • 谢谢。它可以工作,但是当索引混合时会出现问题。我的意思是,当lst2 有 'A1'、'P' 时,如果全部混合,它会更重要。这是这里可能发生的另一种可能性。 lst2 的长度总是在 lst 里面,但是它的索引可以混合@Barmar
    • 我认为lst2 中的元素顺序与lst 中的元素顺序相同,所以它总是要查找的第一个和最后一个。
    • 还有其他想法吗? @Barmar
    • 嗨@Barmar。当lst 拥有'A1, 'Ps, 'PRz' 时,我遇到了新问题,它在before 中给了我不同的长度。
    【解决方案5】:

    你可以使用

    start = lst.index(lst2[0])
    

    这将为您提供 lst2 中第一个值在 lst 中的位置

    end = lst.index(lst2[-1])
    

    这将为您提供 lst2 中最后一个值在 lst 中的位置

    print(len(lst[0:start]))
    print(len(lst[end:-1]))
    

    这会打印值之间的长度

    【讨论】:

    • 他只想要长度,所以它们是startlen(lst) - end
    • 是的。如何使用lst2 获得它? @Barmar
    • [end:-1] 应该是[end+1:]
    • @Barmar 它适用于 start 但不使用此 lst.index(lst2[-1]) 输出为 23
    • @MetalJacket 这就是为什么你必须减去:len(lst) - lst.index(lst2[-1])
    猜你喜欢
    • 2015-10-28
    • 2017-07-28
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 2022-11-14
    • 2018-11-13
    相关资源
    最近更新 更多