<p>这是因为您正在读取和修改阻止遍历每个元素的列表。结尾带有'\n'的武器永远不会被<code>weapon.strip('\n')</code>触及</p>
<p>要使它更干净,请删除遍历问题并除去新的空间,请尝试以下操作<a href="https://stackoverflow.com/questions/339537/end-line-characters-from-lines-read-from-text-file-using-python">answer:</a></p>
<pre class="lang-py prettyprint-override"><code>print("Taking weapons from Weapon shack")
with open("weapons.list") as ws:
readWeapons = ws.readlines()
for weapon in readWeapons:
weapon = weapon.rstrip('\n')
weapons.append(weapon)
print(weapons)
</code></pre>
<p>编辑:</p>
<p>为了回答您的澄清,这是因为python中for循环是如何工作的。我不知道确切的细节,但似乎for循环实际上实时访问了数组,而不是一次读取整个数组。查看test.list中的读数,该列表包含与A-D对应的四行:</p>
<pre class="lang-py prettyprint-override"><code>print("Taking item from test\n")
with open("test.list",'r') as ws:
elements = ws.readlines()
print(elements)
print()
for element in elements:
print('Current element: ' + element)
elements.remove(element)
print('Element pre-strip: ' + str(elements))
element = element.strip('\n')
print('Stripped element: ' + element)
elements.append(element)
print('Element list post-strip: ' + str(elements))
</code></pre>
<p>输出:</p>
<pre><code>Taking item from test
['A\n', 'B\n', 'C\n', 'D\n']
Current element: A
Element pre-strip: ['B\n', 'C\n', 'D\n']
Stripped element: A
Element list post-strip: ['B\n', 'C\n', 'D\n', 'A']
Current element: C
Element pre-strip: ['B\n', 'D\n', 'A']
Stripped element: C
Element list post-strip: ['B\n', 'D\n', 'A', 'C']
Current element: A
Element pre-strip: ['B\n', 'D\n', 'C']
Stripped element: A
Element list post-strip: ['B\n', 'D\n', 'C', 'A']
Current element: A
Element pre-strip: ['B\n', 'D\n', 'C']
Stripped element: A
Element list post-strip: ['B\n', 'D\n', 'C', 'A']
</code></pre>
<p>由于附加而不是前置,当for循环从数组的索引a移动到数组的索引a+1时,将跳过其他所有元素。这导致B和D(索引1和3)被跳过,A被读取3次</p>