我想确保hotel_name
不存在于Hotel.hotels
列表中。
似乎每次我开始喂食for loop时,都会看到一个空列表。你知道吗
注意如果我没有使用for循环
Hotel.hotels.append([number,hotel_name,city,total_number,empty_rooms])
打印酒店名单
[[1, 'Crown Plaza', 'alex', 20, 2], [1, 'Crown Plaza', 'alex', 20, 2], [2, 'Radisson Blu', 'cairo', 24, 22], [3, 'Paradise Inn', 'dubai', 390, 200], [4, 'Four Seasons', 'alex', 1000, 400], [5, 'Address', 'dubai', 500, 200], [6, 'Fairmont', 'dubai', 1000, 100], [7, 'Rotana', 'dubai', 5000, 300]]
[Finished in 0.1s]
这是文件
class Hotel():
"""""""""
this is hotel class file
"""
hotels = []
def __init__(self,number,hotel_name,city,total_number,empty_rooms):
self.number = number
self.hotel_name = hotel_name
self.city = city
self.total_number = total_number
self.empty_rooms = empty_rooms
for i in Hotel.hotels:
if self.hotel_name not in i:
Hotel.hotels.append([number,hotel_name,city,total_number,empty_rooms])
# else:
# print "Hotel already exists!"
feed_dataBase_with_hotel = Hotel(1,"Crown Plaza","alex",20,2)
feed_dataBase_with_hotel = Hotel(1,"Crown Plaza","alex",20,2)# cull repeated
feed_dataBase_with_hotel = Hotel(2,"Radisson Blu","cairo",24,22)
feed_dataBase_with_hotel = Hotel(3,"Paradise Inn","dubai",390,200)
feed_dataBase_with_hotel = Hotel(4,"Four Seasons","alex",1000,400)
feed_dataBase_with_hotel = Hotel(5,"Address","dubai",500,200)
feed_dataBase_with_hotel = Hotel(6,"Fairmont","dubai",1000,100)
feed_dataBase_with_hotel = Hotel(7,"Rotana","dubai",5000,300)
print Hotel.hotels
非常感谢帕特里克的回答 更新 如果我想从dict构建一个列表,因为我想访问空房间并用另一个类更改它的值,该怎么办
class Hotel():
"""
this is hotel class file
"""
hotels = {}
hotelList = []
def __init__(self,number,hotel_name,city,total_number,empty_rooms):
self.number = number
self.hotel_name = hotel_name
self.city = city
self.total_number = total_number
self.empty_rooms = empty_rooms
# edited: no for needed
if self.hotel_name in Hotel.hotels:
print('Hotel {} Already exists!'.format(self.hotel_name))
return # or raise ValueError & handle it
Hotel.hotels[self.hotel_name] = self
tempList = Hotel.hotels.items()
for i in tempList:
x = Hotel.hotels.items()[i][1]
Hotel.hotelList.append(x)
更新
另一个预订类将使用我们在hotel类中使用的实例变量hotel\ u name
from hotel import Hotel
from customer import Customer
from notification import Notification
class Reservation():
reservations =[]
def reserve_room(self,hotel_name, customer_name):
x = Hotel.hotels.values()
for i in x:
if Hotel.hotel_name in i:
Reservation.reservations.append([hotel_name,customer_name])
i[4] -=1
AttributeError:class Hotel没有“Hotel\u name”属性
更新 从Understanding getitem method 使用
def __getitem__(self, hotel_name):
return self.hotel_name
问题解决!
特别感谢Patrick
问题是,在遍历空的“hotels”列表时,需要使用.append。 首先检查for循环中现有的hotel\u名称,然后追加。你知道吗
如果你不想回来,试试这个
我建议改变一些东西来解决它:
您正在迭代一个可能有1000个
Hotel
的列表,以查找其中是否有一个同名的,如果您使用set
或dict
作为O(1)
中的查找,效果会更好。List
有O(n)
查找最坏情况的时间,这意味着set/dict
是常数时间,不管你有多少Hotel
。列表越来越慢,需要搜索的Hotel
越多。用新的Hotel实例覆盖同一个变量,它们自己就会被创建和遗忘—只在
Hotel.hotels
列表中存储它们的值,而不是存储构建的Hotel
本身。Hotel
实例的整个构造是毫无意义的。提议的变更:
Hotel
实例,而不是使用创建的值Hotel
Hotel.hotelDict
—我介绍了一种只接受dici值并按顺序打印的方法—默认情况下,我按Hotel.number
排序测试方法:
输出:
如果您希望您的酒店按名称排序,请简单:
请看这一行酒店:这里
然后试着在这种情况下它会填满你的数组
相关问题 更多 >
编程相关推荐