Python 如何使用另一个namedtuples列表附加到列表?
因此,我对Python非常陌生,在我的入门级CS课程中遇到了一个问题。问题是创建一个包含2000年之前创建的所有标题和2000年之后创建的所有标题的列表。这就是我到目前为止所做的:Python 如何使用另一个namedtuples列表附加到列表?,python,Python,因此,我对Python非常陌生,在我的入门级CS课程中遇到了一个问题。问题是创建一个包含2000年之前创建的所有标题和2000年之后创建的所有标题的列表。这就是我到目前为止所做的: from collections import namedtuple Book = namedtuple("Book", "author title genre year price instock") book_1 = Book("Bob", "Harry Potter", "Fantasy", 2000, 6.0
from collections import namedtuple
Book = namedtuple("Book", "author title genre year price instock")
book_1 = Book("Bob", "Harry Potter", "Fantasy", 2000, 6.00, 1000)
book_2 = Book("Martha", "Hunger Games", "Psychological", 1998, 10.00, 2000)
book_3 = Book("Sam", "The Quest", "Adventure", 2010, 8.00, 5000)
book_4 = Book("Damien", "Pokemon", "Sci-Fi", 1990, 12.00, 10000)
book_5 = Book("Voldemort", "Maze Runner", "Adventure", 2015, 10.00, 50)
book_6 = Book("Anonymous", "Horror Stories Before Bed", "Horror", 2017, 18.00,0)
book_store_inventory = [book_1, book_2, book_3, book_4, book_5, book_6]
before_2000 = []
after_2000 = []
for i in book_store_inventory:
if book_store_inventory[i].year <= 2000:
before_2000.append(i.title)
else:
after_2000.append(i.title)
从集合导入namedtuple
图书=命名倍数(“图书”,“作者名称类型年价格指数”)
book_1=book(“鲍勃”,“哈利波特”,“幻想”,2000年,6.00,1000年)
book_2=book(《玛莎》、《饥饿游戏》、《心理学》,1998年10月,2000年)
book_3=book(“山姆”,“任务”,“冒险”,2010年8月,5000)
book_4=book(“达米恩”、“口袋妖怪”、“科幻小说”,1990年12月10日)
book_5=book(“伏地魔”、“迷宫奔跑者”、“冒险”,2015年10月50日)
book_6=book(“匿名”、“睡前恐怖故事”、“恐怖”,2017年,18.00,0)
book_store_inventory=[book_1、book_2、book_3、book_4、book_5、book_6]
_2000之前=[]
_2000之后=[]
对于i-in-book\u-store\u库存:
如果book_store_inventory[i].year不需要索引:
for book in book_store_inventory:
if book.year <= 2000:
before_2000.append(book.title)
else:
after_2000.append(book.title)
对于图书库存中的图书:
2000年之前的if book.yearif book\u store\u库存if i.year 2000]
由于您有如此多的图书对象,因此创建一个新类来存储图书,并创建属性
装饰器来访问基于特定条件的图书馆数据可能是有意义的:
class Library:
def __init__(self, books):
self.books = books
@property
def before_2000(self):
return [i for i in self.books if i.year <= 2000]
@property
def after_2000(self):
return [i for i in self.books if i.year > 2000]
def __repr__(self):
return '{}({})'.format(self.__class__.__name__, ', '.join(i.title for i in self.books))
book_store_inventory = [book_1, book_2, book_3, book_4, book_5, book_6]
library = Library(book_store_inventory)
print(library.before_2000)
print(library.after_2000)
print(library)
对于i in book\u store\u inventory
变量i
不是索引,而是book
对象。您在book\u store\u inventory
上迭代了两次。没有OP/seb的解决方案那么有效。@Piintesky是真的。但是,做第二次传球很少有什么大不了的。
class Library:
def __init__(self, books):
self.books = books
@property
def before_2000(self):
return [i for i in self.books if i.year <= 2000]
@property
def after_2000(self):
return [i for i in self.books if i.year > 2000]
def __repr__(self):
return '{}({})'.format(self.__class__.__name__, ', '.join(i.title for i in self.books))
book_store_inventory = [book_1, book_2, book_3, book_4, book_5, book_6]
library = Library(book_store_inventory)
print(library.before_2000)
print(library.after_2000)
print(library)
[Book(author='Bob', title='Harry Potter', genre='Fantasy', year=2000, price=6.0, instock=1000), Book(author='Martha', title='Hunger Games', genre='Psychological', year=1998, price=10.0, instock=2000), Book(author='Damien', title='Pokemon', genre='Sci-Fi', year=1990, price=12.0, instock=10000)]
[Book(author='Sam', title='The Quest', genre='Adventure', year=2010, price=8.0, instock=5000), Book(author='Voldemort', title='Maze Runner', genre='Adventure', year=2015, price=10.0, instock=50), Book(author='Anonymous', title='Horror Stories Before Bed', genre='Horror', year=2017, price=18.0, instock=0)]
Library(Harry Potter, Hunger Games, The Quest, Pokemon, Maze Runner, Horror Stories Before Bed)