我试过了:
a_list = [1,2,3]
b_list = [4,5]
...
call_function(a_list + iter(b_list)) # TypeError
是否有比这更好的代码:
a_list = [1,2,3]
b_list = [4,5]
...
new_list = a_list[:]
new_list += iter(b_list) # no TypeError?
call_function(new_list)
考虑任何迭代器,我使用islice
代替iter
。
答案 0 :(得分:4)
在python-3.5中,您可以使用 iterable unpacking :
call_function([*a_list, *iter(b_list)])
这是有效的:
>>> [*a_list, *iter(b_list)]
[1, 2, 3, 4, 5]
注意*
和a_list
前面的星号(iter(b_list)
)。此外,a_list
只需要是有限可迭代/迭代器。因此,您可以简单地构建一个将有限迭代连接在一起的列表。
答案 1 :(得分:3)
您通常使用itertools.chain
加入iterables:
from itertools import chain
new_list = list(chain(a_list, iter(b_list)))
print(new_list)
# [1, 2, 3, 4, 5]
答案 2 :(得分:1)
现有答案已经解决了这个问题。另外,这一行:
new_list += iter(b_list)
不会抛出错误,因为它调用了list.__iadd__
,它支持添加迭代器。
答案 3 :(得分:1)
你可以使用__iadd__()
这是语法糖 namespace PrintCustomerList
{
// Import newly generated Web service proxy.
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using kenedy;
using System.Diagnostics;
using System.Xml;
class Program
{
static void Main(string[] args)
{
var service = new Customer_Service();
service.UseDefaultCredentials = true;
service.Credentials = System.Net.CredentialCache.DefaultCredentials;
service.Url = "http://..:7047/DynamicsNAV90/WS/..%20LIMITED/Page/Customer";
// Create instance of customer.
Customer custArray = new Customer();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("C:\\Users\\..\\Desktop\\Product.xml");
var nodeList = xmlDoc.DocumentElement.SelectNodes("/Table/Product");
for(var i = 0; i < nodeList.Count; i++)
{
foreach (XmlNode node in nodeList)
{
custArray.Address = node.SelectSingleNode("Product_id").InnerText;
custArray.Name = node.SelectSingleNode("Product_name").InnerText;
custArray.Address_2 = node.SelectSingleNode("Product_price").InnerText;
Console.WriteLine(custArray.Name);
}
}
Console.WriteLine("Records Inserted");
Console.WriteLine("End of Customers");
Console.WriteLine("Press [ENTER] to exit program!");
Console.ReadLine();
service.Create(ref custArray);
// service.Update(ref custArray);
//service.CreateMultiple(ref custArray);
// Create instance of service and set credentials.
}
}
的真正功能触发器(这就是为什么它不会产生错误)。
+=
农产品
call_function(a_list.__iadd__(iter(b_list)))
这很有趣,但就诚实而言,在可读性方面并不是很好。更喜欢其他答案:)
修改强>:
当然要制作new_list,你必须在问题中复制>>> a_list.__iadd__(iter(b_list))
[1, 2, 3, 4, 5]
。
list_a