为列表生成器结果分配不同的值

时间:2015-11-07 03:00:55

标签: python list generator arcpy

我正在使用列表生成器,如下所示。我想知道如何为各个列表生成器分配不同的文本或值。在示例代码中,我只能一次为所有列表生成器分配值。例如,我想为check: @echo "checking for tabs in shell scripts" @! git grep -F ' ' -- '*.sh' 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

1 个答案:

答案 0 :(得分: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

你也可能有一些复杂的场景,除了字典查找或元组索引之外,某些函数可以生成额外的值。