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

标签 python list generator arcpy

我正在使用列表生成器,如下所示。我想知道如何为各个列表生成器分配不同的文本或值。在示例代码中,我只能一次为所有列表生成器分配值。例如,我想为 v 分配,row1[3]="value 1",为 k,row1[ 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

最佳答案

有几种不同的方法可以为不同的生成器分配附加值。最简单的方法是使用由生成器键入的字典或包含值的相同长度的迭代。此处显示了两种方法:

可迭代

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

您还可能有一些复杂的场景,其中额外的值可以由字典查找或元组索引之外的某些函数生成。

关于python - 为列表生成器结果分配不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33578676/

相关文章:

python - 使用生成器对生成器进行排序?

javascript - 拒绝 promise 未定义

python - 重用发电机

python - Pandas:对 DataFrame 的每一列进行 nansum 系列

python - 使用 __getattr__ 会导致 TypeError : 'str' object is not callable - Python 2. 7

python - 如何使用 Python 将 Tick by Tick 数据转换为 OHLC 烛台数据?

python - 根据各个对应元素的比率或基于第三个列表对 Python 中的 2 个列表进行排序

c# - 管理带有移动项目的列表的(几乎)最佳方法

python - 将 Shell 命令写入 VirtualEnv?

python / NumPy : Convert list of bools to unsigned int