我有幾個串列,其中一個看起來像這樣:
['SHAPE69', 'SHAPE48', 'SHAPE15', 'SHAPE28', 'SHAPE33', 'SHAPE27', ...]串列中有 100 個形狀。如果形狀數是偶數,則將其轉換為0.0,即浮點數。如果形數為奇數,則轉為1.0,也是浮點數。結果串列應該是這樣的[1.0, 0.0, 1.0, 0.0, 1.0, 1.0, ...]。
我怎樣才能輕松轉換串列?
uj5u.com熱心網友回復:
input_list = ['SHAPE69', 'SHAPE48', 'SHAPE15', 'SHAPE28', 'SHAPE33', 'SHAPE27']
def converter(s: str) -> float:
shape_length = len('SHAPE')
substr = s[shape_length:]
try:
shape_integer = int(substr)
except ValueError:
raise ValueError(f'failed to extract integer value from string {s}')
if shape_integer % 2 == 0:
# it's even
return 0.0
else:
return 1.0
output_list = [converter(x) for x in input_list]
print(output_list)
[1.0, 0.0, 1.0, 0.0, 1.0, 1.0]
該函式converter從SHAPE12字串中洗掉數字,并嘗試將其轉換為整數。然后它運行模運算以確定它是奇數還是偶數,回傳適當的浮點數。
list comp 通過此函式運行 input_list 的每個值來創建一個新串列。
uj5u.com熱心網友回復:
這段代碼應該這樣做:
array = ['SHAPE69', 'SHAPE48', 'SHAPE15', 'SHAPE28', 'SHAPE33', 'SHAPE27']
float_array = []
for item in array:
if int(item[6:8]) % 2 == 0:
float_array.append(0.0)
else:
float_array.append(1.0)
print(float_array)
uj5u.com熱心網友回復:
如果你有一個串列,你可以使用串列理解和模 ( %) 運算子:
l = ['SHAPE69', 'SHAPE48', 'SHAPE15', 'SHAPE28', 'SHAPE33', 'SHAPE27']
out = [int(s.removeprefix('SHAPE'))%2 for s in l]
注意。removeprefix需要 python 3.9 ,對于早期版本:
out = [int(s[5:])%2 for s in l]
輸出:
[1, 0, 1, 0, 1, 1]
變體與熊貓:
import pandas as pd
out = pd.to_numeric(pd.Series(l).str.extract(r'(\d )', expand=False)
).mod(2).tolist()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537824.html
標籤:Python麻木的
