如何根据条件从元组中删除元素?
How to delete an element from a tuple based on a condition?
我正在寻找一种方法来根据 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']]
你只需要检查 Value
变量是否持有任何东西。如果是,则将项目追加到列表中,否则不要追加。
因此,当您要求在另一个 if 条件下执行解决方案时,您可以执行以下操作:
if Value:
data.append([myList[0], Value])
此处,空白字符串 ""
被视为 False
,因此如果值为空白字符串,则不会附加该项目。
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)
您可以“过滤”掉附加在最后一个值中的数据。也就是说,如果该数据条目不符合您设置的要求,您将阻止将该数据条目附加到列表中。有几种方法可以做到这一点
- 您可以将其设置为仅附加符合条件的值
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)
两者都应该给您想要的结果
实现此目的的一种简单方法是在第三个条件中使用 continue
语句。在循环中可以使用continue语句来跳过循环中剩余代码的执行,return控制到下一次迭代的循环开始。
你的情况:
if(Type == "FF"):
continue
data.append([myList[0], Value])
表示如果类型是 'FF' 则跳过 data.append 语句并且该条目不会添加到您的列表中。
你可以做任何需要的事 list comprehension:
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)
我正在寻找一种方法来根据 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']]
你只需要检查 Value
变量是否持有任何东西。如果是,则将项目追加到列表中,否则不要追加。
因此,当您要求在另一个 if 条件下执行解决方案时,您可以执行以下操作:
if Value:
data.append([myList[0], Value])
此处,空白字符串 ""
被视为 False
,因此如果值为空白字符串,则不会附加该项目。
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)
您可以“过滤”掉附加在最后一个值中的数据。也就是说,如果该数据条目不符合您设置的要求,您将阻止将该数据条目附加到列表中。有几种方法可以做到这一点
- 您可以将其设置为仅附加符合条件的值
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)
两者都应该给您想要的结果
实现此目的的一种简单方法是在第三个条件中使用 continue
语句。在循环中可以使用continue语句来跳过循环中剩余代码的执行,return控制到下一次迭代的循环开始。
你的情况:
if(Type == "FF"):
continue
data.append([myList[0], Value])
表示如果类型是 'FF' 则跳过 data.append 语句并且该条目不会添加到您的列表中。
你可以做任何需要的事 list comprehension:
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)