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

来自多个列表的Python字符串连接?

来自多个列表的Python字符串连接?,python,string,list,iteration,Python,String,List,Iteration,我需要生成一个文件,其中每一行是一个句子(模板)和四个变量的串联。 这四个变量(分别为它们的值)以前已收集在单独的列表中。 到目前为止,我已经尝试: num = [1,2,3] fruit = [grape ,banana,pea] fruits = [grapes, bananas, peas] with open('result', 'w') as r: for n,f,g in num,fruit,fruits: r.writelines("This is st

我需要生成一个文件,其中每一行是一个句子(模板)和四个变量的串联。 这四个变量(分别为它们的值)以前已收集在单独的列表中。 到目前为止,我已经尝试:

num = [1,2,3]
fruit = [grape ,banana,pea]
fruits = [grapes, bananas, peas]

with open('result', 'w') as r:
    for n,f,g in num,fruit,fruits: 
        r.writelines("This is string number %d. This is a %s. And I like to eat %s" % (num[n],fruit[f],fruits[g]))
……这种方法提出:

TypeError:列表索引必须是整数,而不是元组

我也不能将它与不同的列表一起“咀嚼”,即第一个concat将第一个和第二个变量+字符串与中间列表一起,以降低“复杂性”


有人能给我一个失败的提示吗?

num,fruit,fruits
给出了一个元组,使得n,f,g在num,fruit,fruits中的
等于:

atuple=num,fruit,fruits
for n,f,g in atuple:
    ...
因此for循环将
atuple[0]
(即
num
),将值
num[0]、num[1]、num[2]
分配给
n、f、g
,然后分配给
fruit[0]、fruit[1]、fruit[2]
。。。这就是为什么你会出错

将n、f、g的数值、水果、水果的
更改为:

for tup in zip(num,fruit,fruits): 
    r.writelines("This is string number %d. 
                  This is a %s. And I like to eat %s" % tup)

请参见

解决此问题的更惯用方法是:

template = "This is string number {}. This is a {}. And I like to eat {}\n"
with open('result', 'w') as r:
    for n, f, fs in zip(num, fruit, fruits):
        r.write(template.format(n, f, fs))
请注意以下事项:

  • 在您的代码中,这段代码:
    In num,fruit,fruits
    正在创建一个包含三个列表的元组;必须使用
    zip()
    将输入列表打包在一起并同时遍历它们
  • 循环中的
    n,f,g
    迭代变量指的是列表中的实际元素,而不是索引。这就是为什么这段代码:
    num[n]、fruit[f]、fruits[g]
    会引发错误
  • 不推荐使用格式化字符串的
    %
    语法,应避免使用
    format()
  • writelines()
    用于写入行列表,用于在使用
    write()
    传递以
    \n
    结尾的字符串时写入单行

  • python中的For语句具有以下语法

    for <value> in <iterable>:
       body 
    
    List is a <iterable> data type. 
    

    可以。

    该用户是python新手,需要解释错误,而不是修复错误。谢谢!复制了您的解决方案,效果非常好。感谢大家的快速和即时帮助!我显然没有完全理解迭代的概念/它的局限性。谢谢你!模板aproach对我来说是新奇的,并且对于第二次替换提出了一个关键错误。但我肯定会查阅文档,尤其是因为它应该成为新的标准
    for (n,f,g) in zip(num,fruit,fruits):