如果我输入"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)
答案 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.