这是我的发电机:
def gen():
state = [None]
for i in range(5):
state[0] = i
yield state
Run Code Online (Sandbox Code Playgroud)
当我调用它时,这是输出:
>>> list(gen())
[[4], [4], [4], [4], [4]]
Run Code Online (Sandbox Code Playgroud)
如果我再次执行该语句,我得到的东西[4](由于[[0], [1], [2], [3], [4]]调用),但所有的相同的值[4].
首先,对不起,如果这个问题非常基本,我只是从 Python 开始。
我在理解 Python 3.6 如何创建对象并将其附加到列表时遇到问题。请参阅以下代码:
a_dict=dict()
a_list=list()
for i in range(100):
a_dict['original'] = i
a_dict['multi'] = i*2
a_list.append(a_dict)
Run Code Online (Sandbox Code Playgroud)
列表的打印如下
print(a_list)
>>[{'original': 99, 'multi': 198}{'original': 99, 'multi': 198}...{'original': 99, 'multi': 198}]
Run Code Online (Sandbox Code Playgroud)
按照我原来的想法,i=0 -> original=0, multi=0; i=1 -> 原始=1,多=2;等等...
但是,根据这里的这个问题,Python 的 append() 附加了一个指向对象的指针,而不是实际值。因此,我将原始代码上的 append(original) 更改为 append(copy):
a_dict=dict()
a_list=list()
for i in range(100):
a_dict['original'] = i
a_dict['multi'] = i*2
a_list.append(a_dict.copy()) ##change here
Run Code Online (Sandbox Code Playgroud)
现在,我得到了想要的结果:
print(a_list)
[{'original': 0, 'multi': 0}, {'original': 1, 'multi': 2}, {'original': 2, 'multi': 4},...]
Run Code Online (Sandbox Code Playgroud)
现在,这是我的问题:
append() 如何真正起作用?是否总是列表包含指向其原始对象的类似指针的对象?其他类型呢?如果我的意图不是直接弄乱原始值或我正在使用的列表/容器,我应该总是使用 …
我试图将字典附加到列表中,问题是在将"Chrome"和"Firefox"值附加到"列表"后,我在列表中只看到两个条目的firefox.exe.
任何帮助真的很感激.请参阅字典的print语句,其中两个值都不同.
MyItems = ["ChromeSetup.exe","firefox.exe"]
listofitems = [{"appId": "ChromeID", 'id': "0","name": 'ChromeSetup.exe','_id': 'ChromeUnique'},{"appId": "FireFoxID", 'id': "0","name": 'firefox.exe','_id': 'FireFoxUnique'} ]
__id = ""
appId = ""
result = []
Dict = {"installerParameters":"","managedApp":{"_id":__id, "appId":appId},"postInstallAction":0,"postInstallScript":{"_id":"0"},"preInstallScript":{"_id":"0"}}
for app in MyItems:
for items in listofitems:
if items['name'] == app:
Dict["managedApp"]["_id"] = items['_id']
Dict["managedApp"]["appId"] = items['appId']
print("Dictionery",Dict)
result.append(Dict)
break
print("See the List", result)
Run Code Online (Sandbox Code Playgroud)
结果:
Dictionery {'installerParameters': '', 'managedApp': {'_id': 'ChromeUnique', 'appId': 'ChromeID'}, 'postInstallAction': 0, 'postInstallScript': {'_id': '0'}, 'preInstallScript': {'_id': '0'}}
Dictionery {'installerParameters': '', 'managedApp': {'_id': 'FireFoxUnique', …Run Code Online (Sandbox Code Playgroud)