我知道有很多标题相似的问题,但没有一个回答我的问题,这是为什么。我不能使用列表理解来创建列表,并在同一行中使用另一个列表理解来扩展它。
我想尝试使用:
['w' for i in range(7)].extend(['b' for i in range(6)])
生成:
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'b', 'b', 'b', 'b', 'b', 'b']
,但最终得到一个NoneType对象。我知道我可以简单地使用['w' for i in range(7)] + ['b' for i in range(6)]
或使用(两行):
x = ['w' for i in range(7)]
x.extend(['b' for i in range(6)])
但是我只是想知道为什么为什么我不能在同一行中对使用列表理解创建的列表使用扩展方法,而不能在同一行中使用通过列表理解创建的另一个列表。
谢谢。
答案 0 :(得分:2)
为什么是因为create table Contact
(
ContactID int primary key not null identity(1,1),
FirstName nvarchar(40) not null,
LastName nvarchar(40) not null
);
go
create table ContactNumber
(
ContactNumberID int primary key not null identity(1,1),
PhoneNumber nvarchar(40) not null,
ContactID int not null,
constraint FK_ContactNumber_Contact_ContactID Foreign Key (ContactID) references Contact(ContactID)
);
go
create table EmailAddress
(
EmailAddressID int primary key not null identity(1,1),
EmailAddress nvarchar(40) not null,
ContactID int not null,
constraint FK_EmailAddress_Contact_ContactID Foreign Key (ContactID) references Contact(ContactID)
);
go
在基础列表上操作并返回None。 (它确实不返回扩展的lsit。)
为说明起见,让我们摆脱列表理解,而只使用列表:
extend()
答案 1 :(得分:0)
实际上,您可以不用extend
来单行执行:
['w' if i < 7 else 'b' for i in range(13)]
输出:
['w', 'w', 'w', 'w', 'w', 'w', 'w', 'b', 'b', 'b', 'b', 'b', 'b']