【问题标题】:Assign differing values to list generator results为列表生成器结果分配不同的值
【发布时间】:2016-02-08 07:14:15
【问题描述】:

我正在使用如下所示的列表生成器。我想知道如何为各个列表生成器分配不同的文本或值。在示例代码中,我只能一次为所有列表生成器赋值。例如,我想为vrow1[3]="value 1"krow1[3]="value 2"mrow1[3]="value 3". 分配,我该如何实现?

v = (item for item in propadd if item[0]==row1[8] and harversine(custx,custy,item[2],item[3])<1500)
k = (item for item in custadd if item[0]==row1[4])
m = (item for item in numlist if re.search(r"^[0-9]+(?=\s)",row1[0]) is not None and item[0]==re.search(r"^[0-9]+(?=\s)",row1[0]).group())
for gen in (v, k, m):
    l = list(gen) 
    if len(l) == 1:
        row1[1] = l[0][1]
        row1[2] = l[0][2]
        break

【问题讨论】:

    标签: python list generator arcpy


    【解决方案1】:

    有几种不同的方法可以为不同的生成器分配附加值。最简单的方法是使用由生成器键入的字典或包含值的相同长度的可迭代对象。两种方法都在这里展示:

    可迭代

    v = (item for item in propadd if item[0]==row1[8] and harversine(custx,custy,item[2],item[3])<1500)
    k = (item for item in custadd if item[0]==row1[4])
    m = (item for item in numlist if re.search(r"^[0-9]+(?=\s)",row1[0]) is not None and item[0]==re.search(r"^[0-9]+(?=\s)",row1[0]).group())
    extraValues = ('value 1', 'value 2', 'value3')
    for ind, gen in enumerate((v, k, m)):
        l = list(gen) 
        if len(l) == 1:
            row1[1] = l[0][1]
            row1[2] = l[0][2]
            row1[3] = extraValues[ind]
            break
    

    字典

    v = (item for item in propadd if item[0]==row1[8] and harversine(custx,custy,item[2],item[3])<1500)
    k = (item for item in custadd if item[0]==row1[4])
    m = (item for item in numlist if re.search(r"^[0-9]+(?=\s)",row1[0]) is not None and item[0]==re.search(r"^[0-9]+(?=\s)",row1[0]).group())
    extraValues = {v: 'value 1',
                   k: 'value 2',
                   m: 'value3')
    for gen in (v, k, m):
        l = list(gen) 
        if len(l) == 1:
            row1[1] = l[0][1]
            row1[2] = l[0][2]
            row1[3] = extraValues[gen]
            break
    

    您还可能遇到一些复杂的情况,其中额外的值可能由字典查找或元组索引以外的某个函数生成。

    【讨论】:

    • 这很完美,可以显着提高性能。谢谢!!
    • 你最后用的是哪一个?
    • 两者的速度似乎差不多,所以我使用字典,因为我更熟悉它,如果需要,我更容易分配更多不同的值。
    • 我同意这是更好的方法。元组基本上充当由生成器索引作为键的字典,这显然更容易出错,因为您可以随时切换索引。
    猜你喜欢
    • 2017-10-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多