python-3.x 如何根据条件从元组中删除元素?

z31licg0  于 2023-02-26  发布在  Python
关注(0)|答案(5)|浏览(145)

我正在寻找一种基于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']]
jutyujz0

jutyujz01#

一个简单的方法是在第三个条件语句中使用continue语句。可以在循环中使用Continue语句跳过循环中剩余代码的执行,并在下一次迭代时将控制返回到循环的开头。
在您的情况下:

if (Type == "FF"):
    continue

data.append([myList[0], Value])

这意味着如果类型是"FF",则跳过data.append语句,并且不将条目添加到列表中。

vq8itlhq

vq8itlhq2#

你只需要检查Value变量是否保存了任何东西,如果保存了,那么就在列表中添加该项,否则就不添加。
因此,当您请求在另一个if条件中实现一个解决方案时,可以执行以下操作:

if Value:
    data.append([myList[0], Value])

这里,空白字符串""被视为False,因此如果Value是空白字符串,则不会追加该项。

guz6ccqo

guz6ccqo3#

您可以“过滤”掉追加到最后一个值中的数据。也就是说,如果该数据条目不符合您设置的要求,您可以阻止将其追加到列表中。有几种方法可以实现这一点
1.您可以将其设置为仅追加与条件匹配的值

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)

1.或者你可以使用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)

两者都应该给予你你正在寻找的结果

wtzytmuj

wtzytmuj4#

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']]

你也可以让你的代码更短,更清晰,更像Python:

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)
4jb9z9bj

4jb9z9bj5#

你可以做任何需要它的列表理解:

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)

相关问题