我有以下列表"mylist"
我为其创建了"foundkeys"
函数来搜索其他列表"keys"
项的出现,输出看起来像"formatted_list"
现在我将"foundkeys"
的输出传递给"reorder"
函数,该函数将已传递的"order"
"foundkeys"
示例的内容重新排序为特定格式。
问题
如果我使用上面的设置,我不会得到所需的确切输出,但是如果我通过'" formatted_list"' " "foundkeys"
"到"reorder"
的确切输出,而不是调用"foundkeys"
,我会得到所需的格式
正确的输出应该是这样的: 用' a'密钥的元素以' a'开头。和' k'密钥的元素以' k'
开头[['a', [[1, 'a', 'Asfoor', 'b', 'c'],
[2, 'a', 'j', 'deek', 'k'],
[3, 'a', 'k', 'bata', 'p']]],
['k', [[2, 'k', 'j', 'a', 'deek'],
[3, 'k', 'bata', 'a', 'p'],
[4, 'k', 'v', 'm', 'farkha']]]]
但如果我使用设置我得到这个错误的输出: 在哪里放置' k'而不是'在' a'的元素中关键
[['a', [[1, 'a', 'Asfoor', 'b', 'c'],
[2, 'k', 'j', 'deek', 'a'],
[3, 'k', 'a', 'bata', 'p']]],
['k', [[2, 'k', 'j', 'deek', 'a'],
[3, 'k', 'a', 'bata', 'p'],
[4, 'k', 'v', 'm', 'farkha']]]]
请仔细查看代码以便更好地理解。
mylist=
[[1, 'Asfoor', 'a', 'b', 'c'],
[2, 'deek', 'j', 'a', 'k'],
[3, 'bata', 'k', 'a', 'p'],
[4,'farkha','v','m','k']]
keys = ['a', 'k']
def foundkeys(mylist,keys):
def found(list, k):
return k in list
final = []
for j in keys:
final.append([j , [k for k in mylist if found(k, j)]])
return final;
order=foundkeys(mylist,keys)
print("New list with found keys \n",order)
formatted_list=
[
[
'a', [[1, 'Asfoor', 'a', 'b', 'c'], [2, 'deek', 'j', 'a', 'k'], [3, 'bata', 'k', 'a', 'p']
]],
[
'k', [[2, 'deek', 'j', 'a', 'k'], [3, 'bata', 'k', 'a', 'p'], [4, 'farkha', 'v', 'm', 'k']]
]
]
def reorder(alist):
for item in alist:
key=item[0]
value=item[1]
for c,v_item in enumerate(value):
old=value[c][1]
for i,s_value in enumerate(value[c]):
if s_value==key:
value[c][i]=old
value[c][1]=key
# calling reorder function with order function list
reorder(order)
print(order)
# calling reorder function with formatted_list instead
reorder(formatted_list)
print(formatted_list)
答案 0 :(得分:1)
Python使用引用来存储列表。要查看此内容,请尝试运行以下代码。
a = [1, 2]
b = [a for i in range(0, 3)]
print(b) # prints out [[1, 2], [1, 2], [1, 2]]
b[0][0] = 4
print(b) # prints out [[4, 2], [4, 2], [4, 2]]
[a for i in range(0, 3)]
不会插入三个"个人" a
b
。a
。它实际上将b
的引用插入b[0][0]
。因此,当我们通过a = [1, 2]
b = [list(a) for i in range(0, 3)] # This line is different
print(b) # prints out [[1, 2], [1, 2], [1, 2]]
b[0][0] = 4
print(b) # prints out [[4, 2], [1, 2], [1, 2]]
更改元素时,我们会使用相同的引用更改所有列表。
要解决这个问题,只需要让python创建一个新列表,而不仅仅是复制引用。
for j in keys:
final.append([j , [list(k) for k in mylist if found(k, j)]])
所以在你的代码中,它应该是
order
现在,您将使用formatted_list
和 <div class="content">
<h1 id="unavailable-message" class="message">
The video you have requested is not available.
</h1>
<div id="unavailable-submessage" class="submessage">
Sorry about that.
</div>
</div>
获得相同的结果。
您可以查看this post以了解有关参考和副本的更多信息。