Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.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_String_Function_For Loop - Fatal编程技术网

Python函数循环遍历每个列表值并插入到字符串中

Python函数循环遍历每个列表值并插入到字符串中,python,string,function,for-loop,Python,String,Function,For Loop,我有一个值列表,我想循环并插入到“”“字符串语句中。但我不熟悉for循环,不确定有效插入列表值的最佳方法是什么 我有一张单子- subqueries = ['name','name2','name3'] 和字符串语句- """SELECT * FROM <insert name from list here> WHERE id=weather""" 得到- name = qry + """S

我有一个值列表,我想循环并插入到
“”“
字符串语句中。但我不熟悉for循环,不确定有效插入列表值的最佳方法是什么

我有一张单子-

subqueries = ['name','name2','name3']
和字符串语句-

"""SELECT * FROM <insert name from list here> WHERE id=weather"""
得到-

name = qry + """SELECT * FROM name WHERE id=weather"""
name2 = qry + """SELECT * FROM name2  WHERE id=weather"""
name3 = qry + """SELECT * FROM name3 WHERE id=weather"""

如何有效地执行此操作?

您可以使用格式字符串,在开始字符串之前使用“f”,并使用变量 在
{}
内部,如下所示:
{sub}
, 然后使用
.append()
函数添加到列表中

for sub in subqueries:
    qry_list.append(qry + f"SELECT * FROM {sub} WHERE id=weather")
您可以使用。此外,您的函数有一个小错误,更正和格式化的版本为:

def sub_view(qry, subqueries):
    qry_list = []
    for sub in subqueries:
        qry_list = f"{qry} SELECT * FROM {sub} WHERE id=weather"
        return qry_list
您可以这样使用“lambda”:

def sub_view(qry, subqueries):
    return list(map(lambda s: qry + """SELECT * FROM """ + s + """ WHERE id=weather""", subqueries))
def sub_view(qry, subqueries):
    qry_list = []
    for sub in subqueries:
        #qry_list.append(qry + """SELECT * FROM """ + sub + """ WHERE id=weather""")
        qry_list.append("""%s SELECT * FROM %s WHERE id = weather""" % (qry, sub))
    return qry_list
>>> name, name2, name3 = sub_view('Some prefix string', subqueries)
>>> name
"Some prefix string SELECT * FROM name WHERE id='weather'"
>>> name2
"Some prefix string SELECT * FROM name2 WHERE id='weather'"
>>> name3
"Some prefix string SELECT * FROM name3 WHERE id='weather'"
您也可以这样使用“for”:

def sub_view(qry, subqueries):
    return list(map(lambda s: qry + """SELECT * FROM """ + s + """ WHERE id=weather""", subqueries))
def sub_view(qry, subqueries):
    qry_list = []
    for sub in subqueries:
        #qry_list.append(qry + """SELECT * FROM """ + sub + """ WHERE id=weather""")
        qry_list.append("""%s SELECT * FROM %s WHERE id = weather""" % (qry, sub))
    return qry_list
>>> name, name2, name3 = sub_view('Some prefix string', subqueries)
>>> name
"Some prefix string SELECT * FROM name WHERE id='weather'"
>>> name2
"Some prefix string SELECT * FROM name2 WHERE id='weather'"
>>> name3
"Some prefix string SELECT * FROM name3 WHERE id='weather'"

不清楚您的目标是什么,因为查询字符串看起来没有那么有用,但是,您可以使用列表理解创建包含替换的查询列表:

def sub_view(qry, subqueries):
    return [f"{qry} SELECT * FROM {table} WHERE id='weather'" for table in subqueries]

>>> subqueries = ['name','name2','name3']
>>> sub_view('Some prefix string', subqueries)
["Some prefix string SELECT * FROM name WHERE id='weather'", "Some prefix string SELECT * FROM name2 WHERE id='weather'", "Some prefix string SELECT * FROM name3 WHERE id='weather'"]
这将返回一个列表。要将每个查询绑定到一个变量,需要知道列表中有多少项及其顺序。您可以手动编写如下代码:

def sub_view(qry, subqueries):
    return list(map(lambda s: qry + """SELECT * FROM """ + s + """ WHERE id=weather""", subqueries))
def sub_view(qry, subqueries):
    qry_list = []
    for sub in subqueries:
        #qry_list.append(qry + """SELECT * FROM """ + sub + """ WHERE id=weather""")
        qry_list.append("""%s SELECT * FROM %s WHERE id = weather""" % (qry, sub))
    return qry_list
>>> name, name2, name3 = sub_view('Some prefix string', subqueries)
>>> name
"Some prefix string SELECT * FROM name WHERE id='weather'"
>>> name2
"Some prefix string SELECT * FROM name2 WHERE id='weather'"
>>> name3
"Some prefix string SELECT * FROM name3 WHERE id='weather'"
考虑到您需要变量计数的先验知识,您可以使用该列表。将其命名为
names
,并按索引引用“变量”:

>>> names = sub_view('Some prefix string', subqueries)
>>> names[0]
"Some prefix string SELECT * FROM name WHERE id='weather'"
>>> names[1]
"Some prefix string SELECT * FROM name2 WHERE id='weather'"
...
或使用字典理解创建字典:

def sub_view(qry, subqueries):
    return {table: f"{qry} SELECT * FROM {table} WHERE id='weather'" for table in subqueries}

>>> queries = sub_view('Some prefix string', subqueries)
>>> queries
{'name': "Some prefix string SELECT * FROM name WHERE id='weather'", 'name2': "Some prefix string SELECT * FROM name2 WHERE id='weather'", 'name3': "Some prefix string SELECT * FROM name3 WHERE id='weather'"}

>>> queries['name']
"Some prefix string SELECT * FROM name WHERE id='weather'"
>>> queries['name2']
"Some prefix string SELECT * FROM name2 WHERE id='weather'"
...

最后一个示例可能与您想要的最接近。它将处理任意数量的查询,您仍然可以通过使用名称作为字典查找的键来访问单个查询。

也许可以先阅读f字符串?这些都是非常有用的答案,我如何将它们单独列出?如名称、名称2、名称3变量?可以你能详细描述一下吗?你把它们分开是什么意思?我想,你不知道如何访问列表元素。调用你的函数并将其赋值:
my_querys=sub_view(qry,subquerys)print(my_querys[0])\name print(my_querys[1])#name2
因此每个子查询都成为它自己的字符串变量,试图在有问题的输出描述中对其进行分解谢谢,目标对我很有帮助……我想没有更自动化的方法来循环和创建这些字符串变量了?单行列表或字典理解与它一样简洁和自动化获取。字典理解可能是最好的:它获取表/子查询列表和
qry
值,并返回一个字典,可用于按子查询列表中提供的名称查找字符串。按变量名访问结果所需的信息量与字典所需的信息量完全相同,并且需要额外的代码来执行分配,因此这样做没有自动化优势。