我正在尋找一種基于 Python 中的條件從元組中完全洗掉元素的方法。以下是我的代碼的一小部分。如果可能的話,我希望解決方案在第三個 if 子句中做它的事情,以保持我的主要代碼的結構。
這是我的代碼:
import ast
data = []
myList=[0,"[('AA', 'BB'), ('CC', 'DD'), ('EE', 'FF'), ('GG', 'HH')]"]
for a in ast.literal_eval(myList[1]):
Value = a[0]
Type = a[1]
if(Type == "BB"):
Value="XX"
if(Type == "DD"):
Value="YY"
if(Type == "FF"):
Value=""
data.append([myList[0], Value])
print(data)
電流輸出:
[[0, 'XX'], [0, 'YY'], [0, ''], [0, 'GG']]
我需要的:
[[0, 'XX'], [0, 'YY'], [0, 'GG']]
uj5u.com熱心網友回復:
實作此目的的一種簡單方法是continue在第三個條件中使用該陳述句。Continue 陳述句可以在回圈中使用,以跳過回圈中剩余代碼的執行,并在下一次迭代時將控制權回傳到回圈的開頭。
在你的情況下:
if(Type == "FF"):
continue
data.append([myList[0], Value])
這意味著如果 type 為 'FF' 則跳過 data.append 陳述句并且該條目不會添加到您的串列中。
uj5u.com熱心網友回復:
您只需要檢查Value變數是否包含任何內容。如果確實如此,則將專案附加到串列中,否則不要。
因此,當您要求在另一個 if 條件下實施解決方案時,您可以執行以下操作:
if Value:
data.append([myList[0], Value])
這里,空白字串""被視為False,因此如果 Value 為空白字串,則不會附加該專案。
uj5u.com熱心網友回復:
您可以“過濾”掉最后一個值中附加的資料。即,如果它不符合您設定的要求,您將阻止將該資料條目附加到串列中。有幾種方法可以做到這一點
- 您可以將其設定為僅附加符合條件的值
import ast
data = []
myList=[0,"[('AA', 'BB'), ('CC', 'DD'), ('EE', 'FF'), ('GG', 'HH')]"]
for a in ast.literal_eval(myList[1]):
Value = a[0]
Type = a[1]
if(Type == "BB"):
Value="XX"
if(Type == "DD"):
Value="YY"
if(Type != "FF"):
data.append([myList[0], Value])
print(data)
- 或者,您可以使用
continue跳過回圈的最后一部分。這個看起來更好,并使您的代碼保持一致。continue告訴python“跳過所有內容,直到下一個回圈”。
import ast
data = []
myList=[0,"[('AA', 'BB'), ('CC', 'DD'), ('EE', 'FF'), ('GG', 'HH')]"]
for a in ast.literal_eval(myList[1]):
Value = a[0]
Type = a[1]
if(Type == "BB"):
Value="XX"
if(Type == "DD"):
Value="YY"
if(Type == "FF"):
continue
data.append([myList[0], Value])
print(data)
兩者都應該給你你正在尋找的結果
uj5u.com熱心網友回復:
import ast
data = []
myList=[0,"[('AA', 'BB'), ('CC', 'DD'), ('EE', 'FF'), ('GG', 'HH')]"]
for a in ast.literal_eval(myList[1]):
Value = a[0]
Type = a[1]
if(Type == "BB"):
Value="XX"
if(Type == "DD"):
Value="YY"
if(Type == "FF"):
Value=""
if not Value == "":
data.append([myList[0], Value])
print(data)
# [[0, 'XX'], [0, 'YY'], [0, 'GG']]
您還可以使您的代碼更短、更清晰、更 Pythonic,如下所示:
import ast
data = []
my_lst = [0, "[('AA', 'BB'), ('CC', 'DD'), ('EE', 'FF'), ('GG', 'HH')]"]
type_to_val = {'BB': 'XX', 'DD': 'YY', 'FF': ''}
for tup in ast.literal_eval(my_lst[1]):
(cur_val, cur_type) = tup
try:
cur_val = type_to_val[cur_type]
except KeyError:
pass
if cur_val != "":
data.append([my_lst[0], cur_val])
print(data)
uj5u.com熱心網友回復:
你可以做所有需要它的串列理解:
import ast
myList=[0,"[('AA', 'BB'), ('CC', 'DD'), ('EE', 'FF'), ('GG', 'HH')]"]
data = [(myList[0], value) for value, type_ in ast.literal_eval(myList[1] if type_ != "FF"]
print(data)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/478065.html
標籤:Python python-3.x
上一篇:嘗試使用_make函式創建namedtuple物件時出錯
下一篇:如何從這些資料創建資料透視表
