2012-11-03 51 views
6

Tôi đang viết một đoạn mã nhỏ lấy tất cả các chữ cái bắt đầu bằng chữ in hoa trong python. Đây là mã của tôiMã để phát hiện tất cả các từ bắt đầu bằng chữ in hoa trong một chuỗi

def WordSplitter(n): 
    list1=[] 
    words=n.split() 
    print words 

    #print all([word[0].isupper() for word in words]) 
    if ([word[0].isupper() for word in words]): 
     list1.append(word) 
    print list1 

WordSplitter("Hello How Are You") 

Bây giờ khi tôi chạy mã trên. Tôi hy vọng danh sách đó sẽ chứa tất cả các phần tử, từ chuỗi, vì tất cả các từ trong đó bắt đầu bằng một chữ cái viết hoa. Nhưng đây là đầu ra của tôi:

@ubuntu:~/py-scripts$ python wordsplit.py 
['Hello', 'How', 'Are', 'You'] 
['You']# Im expecting this list to contain all words that start with a capital letter 

Trả lời

9

Bạn chỉ đánh giá nó một lần, vì vậy bạn sẽ có được một danh sách các True và nó chỉ gắn thêm mục cuối cùng.

print [word for word in words if word[0].isupper() ] 

hoặc

for word in words: 
    if word[0].isupper(): 
     list1.append(word) 
1

Bạn có thể tận dụng lợi thế của filter chức năng:

l = ['How', 'are', 'You'] 
print filter(str.istitle, l) 
+4

Điều này cũng được đề xuất trong một câu trả lời đã bị xóa, nhưng nó có vấn đề: nó không thể xử lý 'CamelCase', bắt đầu bằng một chữ hoa, nhưng' 'CamelCase'.istitle() 'là sai. Tương tự với 'ALLCAPS'. – DSM

0

Tôi đã viết đoạn python sau để lưu trữ các chữ cái viết hoa bắt đầu từ vào một từ điển như chìa khóa và không xuất hiện dưới dạng giá trị trong từ điển này đối với khóa.

#!/usr/bin/env python 
import sys 
import re 
hash = {} # initialize an empty dictinonary 
for line in sys.stdin.readlines(): 
    for word in line.strip().split(): # removing newline char at the end of the line 
     x = re.search(r"[A-Z]\S+", word) 
     if x: 
     #if word[0].isupper(): 
      if word in hash: 
       hash[word] += 1 
      else: 
       hash[word] = 1 
for word, cnt in hash.iteritems(): # iterating over the dictionary items 
    sys.stdout.write("%d %s\n" % (cnt, word)) 

Trong mã trên, tôi chỉ ra cả hai cách, chỉ mục mảng để kiểm tra chữ cái viết hoa và sử dụng cụm từ thông dụng. Đề xuất cải tiến đồng thời cho mã trên để thực hiện hoặc đơn giản được chào đón

Các vấn đề liên quan