回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我需要完成一个任务,其中涉及清理Python中的列表列表。如果子列表包含非数字或数字但大于20的项,我需要删除子列表并将其添加到单独的列表中</p>
<p>我当前的代码正确地删除了一些子列表,但没有删除其他子列表。我想这是因为两个连续的子列表有错误,但我还没能解决这个问题。我的代码:</p>
<pre class="lang-py prettyprint-override"><code>datalist = [['16', '10', '8', '3', '7'], ['8', '9', '19', '20', '4'], ['6', '8', '16', '5', '0'], ['1', '30', '2', '5', '7'], ['14', '1', '2', '9', '3'], ['6', '9', '16', '0', ''], ['14', '11', 'forteen', '8', '20'], ['12', '11', '8', '15', '7'], ['18', '9', '9', '22', '4'], ['1', '3', '14', '18', '20'], ['5', '3', '19', '20', '0'], ['einundzwanzig', '14', '1', '2', '4']]
invalidList = []
def validate(myList): #non-numeric values or values greater than 20 must be removed from myList and added to invalidList
for lst in myList: # check each list
for item in lst: # check element in each list
try:
val = int(item)
if val >20:
raise ValueError
except ValueError:
invalidList.append(lst)
myList.remove(lst)
return myList
</code></pre>
<p>有问题的子列表是:</p>
<pre><code>['14', '11', 'forteen', '8', '20']
</code></pre>
<p>实际输出:</p>
<pre><code>>>> print(validate(datalist)) # this should be the cleansed list
[['16', '10', '8', '3', '7'], ['8', '9', '19', '20', '4'], ['6', '8', '16', '5', '0'], ['14', '1', '2', '9', '3'], ['14', '11', 'forteen', '8', '20'], ['12', '11', '8', '15', '7'], ['1', '3', '14', '18', '20'], ['5', '3', '19', '20', '0']]
>>> print(invalidList)
[['1', '30', '2', '5', '7'], ['6', '9', '16', '0', ''], ['18', '9', '9', '22', '4'], ['einundzwanzig', '14', '1', '2', '4']]
</code></pre>
<p>预期产量:</p>
<pre><code>>>> print(validate(datalist)) # this should be the cleansed list
[['16', '10', '8', '3', '7'], ['8', '9', '19', '20', '4'], ['6', '8', '16', '5', '0'], ['14', '1', '2', '9', '3'], ['12', '11', '8', '15', '7'], ['1', '3', '14', '18', '20'], ['5', '3', '19', '20', '0']]
>>> print(invalidList)
[['1', '30', '2', '5', '7'], ['6', '9', '16', '0', ''], ['14', '11', 'forteen', '8', '20'],['18', '9', '9', '22', '4'], ['einundzwanzig', '14', '1', '2', '4']]
</code></pre>
<p>提前感谢:)</p>