我有這個函式setValue(binaryString),它接受輸入二進制字串“ binaryString”并回傳 0 和 len(binaryString)-1 之間的位置集,其對應的 binaryString 條目是 '1'。
例如:
binaryString = 10101將回傳 set {0, 2, 4}。回傳的集合表示數字 '1' ini binaryString 的位置
最終結果將放在字典 D={} 中,以 binaryString 為鍵,stringToSet(binaryString) 為值。
到目前為止,我已經嘗試過這段代碼:
def setValue(binaryString):
values = set()
for pos,char in enumerate(binaryString):
if(char == '1'):
values.add(pos)
print(values)
def main():
D = {}
keys = []
while True:
binaryString = input(str("Input Binary String: "))
if binaryString == "exit":
break
else:
keys.append(binaryString)
print(keys)
for i in keys:
setValue(i)
if __name__ == "__main__":
main()
我的代碼導致:
Input Binary String: 10101
Input Binary String: 110011
Input Binary String: exit
['10101', '110011']
{0, 2, 4}
{0, 1, 4, 5}
雖然我希望得到這樣的結果:
Input Binary String: 10101
Input Binary String: 0
Input Binary String: 1
Input Binary String: 1111
Input Binary String: exit
10101: {0, 2, 4}
0: set()
1: {0}
1111: {0, 1, 2, 3}
我不知道如何從中獲取鍵binaryString和值setValue(binaryString)并將它們放入字典中D{}
提前致謝
uj5u.com熱心網友回復:
集合理解怎么樣?
def one_index(s):
return {i for i, e in enumerate(s) if e == '1'}
examples = '0', '1', '110011', '10101'
result = {bs: one_index(bs) for bs in examples}
print(result)
輸出:
{'0': set(), '1': {0}, '110011': {0, 1, 4, 5}, '10101': {0, 2, 4}}
uj5u.com熱心網友回復:
你需要values從你的setValues函式中回傳,然后你可以使用字典理解來構造字典
def setValue(binaryString):
values = set()
for pos, char in enumerate(binaryString):
if char == '1':
values.add(pos)
return values
strings = ['10101', '110011']
d = {s: setValue(s) for s in strings}
輸出
{'10101': {0, 2, 4}, '110011': {0, 1, 4, 5}}
uj5u.com熱心網友回復:
如果你有一個元組串列 [(a, b), (c, d)...],你可以使用它們作為dict建構式的輸入來創建一個 dict 物件:
>>> dict ([(1, 2), (3, 4)])
{1: 2, 3: 4}
如果您有兩個串列,則可以使用 zip 函式創建一個可迭代的元組序列,從每個串列中獲取元素:
>>> list(zip([1,3], [2,4]))
[(1, 2), (3, 4)]
>>>
將它們放在一起,如果您有兩個串列,并且希望一個作為鍵,另一個作為字典中的值,則可以將它們壓縮在一起并使用dict建構式:
>>> keys = [1,3]
>>> vals = [2, 4]
>>> dict(zip(keys, vals))
{1: 2, 3: 4}
>>>
或者,如果您有一個用作鍵的輸入串列和一個為每個鍵生成相應值的函式,您可以使用 dict 理解:
result = {binaryString: setValue(binaryString) for binaryString in inputs}
兩個旁注:
- Python 風格更喜歡
snake_case函式camelCase名。遵守這個約定將使您的代碼更容易被其他 Python 程式員閱讀。 setValue由于函式名稱讀起來像命令式動詞短語,它向我暗示該函式的目的是設定一個值。我認為你的意思是“回傳這個數字的特殊二進制表示”。我會尋找一個能更好地傳達您的意圖的名稱。我想到的一個是as_binary_set,但這可能并不完全正確。
uj5u.com熱心網友回復:
import itertools
inputs = [10101, 0, 1, 1111]
mapping = dict()
for i in inputs:
s = str(i)
indices = range(len(s))
selectors = map(int,list(s))
c = itertools.compress(indices,selectors)
mapping[i] = set(c)
for k,v in mapping.items():
print(k,v)
itertools.compress將洗掉0二進制字串中的索引。
輸出:
10101 {0, 2, 4}
0 set()
1 {0}
1111 {0, 1, 2, 3}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/526786.html
標籤:Python功能循环字典
