假设我们有一个列表和一个列表列表。我想替换后者的每个子列表中的所有值,以使值i
被前者的第i
位的值替换。例如:
l = [4,2,1,0,3]
l_of_l = [[0,3],[4,1,2,3],[2,4]]
desired_output = [[4,0],[3,2,1,0],[1,3]]
所有0
被l[0]
代替,4
等于1
。所有l[1]
都由2
代替,l
等于0
。依此类推。
所有数字仅在6
中出现一次,最大和最小之间的所有数字都在那里。即,如果最小值为list(range(7))
,最大值为l_of_l
,则列表将是l
的改组版本。同样,l
包含的列表中存在的所有数字都出现在6
中(即,如果6
中的最大值为l_of_l
,则不会有任何数字大于for this_l in l_of_l:
for i in range(len(this_l)):
this_l[i] = l[this_l[i]]
的任何列表中的{{1}}。
我已经做到了:
{{1}}
但是我不太喜欢循环。有没有更Python的方法来做到这一点?
答案 0 :(得分:2)
您可以使用列表理解:
sink
输出:
l = [4,2,1,0,3]
l_of_l = [[0,3],[4,1,2,3],[2,4]]
result = [[l[b] for b in i] for i in l_of_l]
或者,如果您希望完全避免显式循环,则可以使用[[4, 0], [3, 2, 1, 0], [1, 3]]
:
map
输出:
result = list(map(lambda x:list(map(lambda c:l[c], x)), l_of_l))
尽管后者不如列表理解那么干净。
答案 1 :(得分:1)
列表理解始终是一个选择,尽管它不会像您的解决方案那样就位:
result = [[l[x] for x in row] for row in l_of_l]
我知道您说过您不想要一种完全递归的解决方案,但这是一个适用于包含整数和其他可迭代对象的任意嵌套可迭代对象的解决方案:
from functools import partial
def lookup(table, values):
try:
return list(map(partial(lookup, table), values))
except TypeError:
return table[values]
IDEOne链接:https://ideone.com/atwfnO
答案 2 :(得分:1)
通过将class HomeViewController:UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
var firestore:Firestore = Firestore.firestore()
override func viewDidLoad() {
super.viewDidLoad()
let query = firestore.collection("/offers")
let dataSource = collectionView.bind(toFirestoreQuery: query) { (collectionView, indexPath, documentSnapshot) -> UICollectionViewCell in
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! OfferHolderCollection
print("POPULATING")
cell.myLabel?.text = documentSnapshot.data()?["name"] as? String
return cell
}
}
与for
一起使用,可以避免显式的内部map
循环:
list.__getitem__