Python for循环迭代列表

时间:2013-04-04 16:37:38

标签: python for-loop

如果我输入"apple Pie is Yummy"我想要:['Pie','Yummy'] ['apple','is']

我得到:[] ['apple', 'Pie', 'is', 'Yummy']

如果我输入"Apple Pie is Yummy"我想要:['Apple','Pie','Yummy'] ['is']

我得到:['Apple', 'Pie', 'is', 'Yummy'] []

它的行为就像我的条件运算符只在for循环的第一次迭代中读取一次,然后额外的迭代不会评估条件。

str = input("Please enter a sentence: ")

chunks = str.split()

# create tuple for use with startswith string method
AtoZ = ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z')

# create empty lists to hold data
list1 = []
list2 = []

for tidbit in chunks:
    list1.append(tidbit) if (str.startswith(AtoZ)) else list2.append(tidbit)

print(list1)
print(list2)

3 个答案:

答案 0 :(得分:3)

您正在测试错误的变量;您想检查tidbit,而不是str

list1.append(tidbit) if (tidbit.startswith(AtoZ)) else list2.append(tidbit)

我改为使用Python自己的str.isupper()测试来测试tidbit的第一个字符:

list1.append(tidbit) if tidbit[0].isupper() else list2.append(tidbit)

接下来,只需使用列表推导创建两个列表,因为使用条件表达式的副作用非常可怕:

list1 = [tidbit for tidbit in chunks if tidbit[0].isupper()]
list2 = [tidbit for tidbit in chunks if not tidbit[0].isupper()]

答案 1 :(得分:1)

chunks = raw_input("Enter a sentence: ").split()
list1 = [chunk for chunk in chunks if chunk[0].isupper()]
list2 = [chunk for chunk in chunks if chunk not in list1]

答案 2 :(得分:0)

您可以在此处使用str.isupper()

def solve(strs):

    dic={"cap":[],"small":[]}

    for x in strs.split():
        if x[0].isupper():
            dic["cap"].append(x)
        else:    
            dic["small"].append(x)

    return dic["small"],dic["cap"]



In [5]: solve("apple Pie is Yummy")
Out[5]: (['apple', 'is'], ['Pie', 'Yummy'])

In [6]: solve("Apple Pie is Yummy")
Out[6]: (['is'], ['Apple', 'Pie', 'Yummy'])

帮助(str.upper)

In [7]: str.isupper?
Type:       method_descriptor
String Form:<method 'isupper' of 'str' objects>
Namespace:  Python builtin
Docstring:
S.isupper() -> bool

Return True if all cased characters in S are uppercase and there is
at least one cased character in S, False otherwise.