Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迭代元组列表中的每个值_Python_List Comprehension - Fatal编程技术网

Python 迭代元组列表中的每个值

Python 迭代元组列表中的每个值,python,list-comprehension,Python,List Comprehension,我有一个元组列表,其中列表中的行数和列表中元组中的列数不是常数。i、 e list=[(a1,b1,…z1),(a2,b2,…z2),…(am,bm,…,zm)]。它可以与SQL结果进行比较,因为SQL中的列数发生了变化,元组列表中的列数也发生了变化 我必须遍历列表中每个元组的每个元素,对值执行一些检查,转换它,并将修改后的值作为新的元组列表返回 i、 e 我需要访问每个值以检查该值是否包含双引号,并用双引号括住包含双引号的字符串(这将是检查之一)。转型应该会回来 list_value = [(

我有一个元组列表,其中列表中的行数和列表中元组中的列数不是常数。i、 e

list=[(a1,b1,…z1),(a2,b2,…z2),…(am,bm,…,zm)]
。它可以与SQL结果进行比较,因为SQL中的列数发生了变化,元组列表中的列数也发生了变化

我必须遍历列表中每个元组的每个元素,对值执行一些检查,转换它,并将修改后的值作为新的元组列表返回

i、 e

我需要访问每个值以检查该值是否包含双引号,并用双引号括住包含双引号的字符串(这将是检查之一)。转型应该会回来

list_value = [('name1', 1234, 'address1' ), ('name2', 5678, 'address2'), ('name3', 1011, '"addre"ss3"')]
对我来说,最简单的方法是:

mod_val = [transform(row) for row in list_value]

def transform(row):
   mod_list=[]
   while index < len(row):
...    if isinstance(row[index],basestring):
...       if '"' in row[index]:
...          mod_list.append('"'+row[index]+'"')
...    else:
...       mod_list.append(row[index])
...    index = index+1
... return mod_list
mod_val=[列表_值中的行的转换(行)]
def转换(行):
mod_list=[]
当索引

有没有办法使用列表理解使代码简洁?

您可以嵌套列表理解:

mod_val = [['"{}"'.format(v) if isinstance(v, basestring) and '"' in v else v 
            for v in row]
           for row in list_value]
mod_val = [['"'+item+'"' if (isinstance(item, str) and '"' in item) else item for item in row] for row in list_value]
您的
transform()
函数无法添加不带引号的字符串,即使您的示例输出指示这些字符串应该原封不动地传递

演示:


如果你真的想要一份清单:

mod_val = [['"{}"'.format(v) if isinstance(v, basestring) and '"' in v else v 
            for v in row]
           for row in list_value]
mod_val = [['"'+item+'"' if (isinstance(item, str) and '"' in item) else item for item in row] for row in list_value]
尽管我建议

def transform(row):
    for item in row:
        if isinstance(item, basestring) and '"' in item:
            item = '"{}"'.format(item)

        yield item

mod_val = [list(transform(row)) for row in list_value]

def transform(row):
    if isinstance(item, str) and '"' in item:
        return '"{}"'.format(item)

    return item

mod_val = [map(transform, row) for row in list_value]