Làm thế nào để tách các phần tử của một danh sách?


84

Tôi có một danh sách:

my_list = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847']

Làm cách nào tôi có thể xóa \tvà mọi thứ sau đó để nhận được kết quả này:

['element1', 'element2', 'element3']

Câu trả lời:


110

Cái gì đó như:

>>> l = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847']
>>> [i.split('\t', 1)[0] for i in l]
['element1', 'element2', 'element3']

Tôi gần như hiểu điều này. Số 1 bên trong đối số để tách làm gì? Tương tự cho những gì tôi giả sử là chỉ số 0 sau các parens. Đây có phải là việc tạo một danh sách mới bằng cách sử dụng phần tử thứ 0 của những gì đã từng là tôi không? Sau đó, liệu số 1 chỉ là một lần tách khác, loại bỏ hiệu quả phần còn lại của chuỗi như OP muốn?
Malik A. Rumi,

2
Vì danh sách chứa các chuỗi nên biến i là một chuỗi. Vì vậy, i.split ('\ t', 1) gọi phương thức split () của chuỗi. Theo tài liệu , tham số đầu tiên của phương thức này là chuỗi để chia nhỏ và tham số thứ hai là số lần chia nhỏ nhất để thực hiện. Phương thức trả về danh sách các chuỗi là kết quả của việc thực hiện tách, vì vậy "[0]" trả về chuỗi phân tách đầu tiên trong danh sách kết quả.
jcl

2
Khi tôi thử điều này cho mã của riêng mình, nó trả về lỗi đối tượng 'danh sách' không có thuộc tính 'phân tách'. Tôi bối rối không biết làm thế nào để giải quyết vấn đề này.
keitereth24

1
@ keitereth24, danh sách chuỗi được chia theo kiểu La Mã. Bạn có thể có một danh sách danh sách
AAI

35
myList = [i.split('\t')[0] for i in myList] 

9

Hãy thử lặp lại từng phần tử của danh sách, sau đó tách nó ở ký tự tab và thêm nó vào danh sách mới.

for i in list:
    newList.append(i.split('\t')[0])

5
Điều này hiệu quả, nhưng hiểu danh sách là cách tốt hơn nhiều để làm điều này
dave

6

Không sử dụng danh sách làm tên biến. Bạn cũng có thể xem đoạn mã sau:

clist = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847', 'element5']
clist = [x[:x.index('\t')] if '\t' in x else x for x in clist]

Hoặc chỉnh sửa tại chỗ:

for i,x in enumerate(clist):
    if '\t' in x:
        clist[i] = x[:x.index('\t')]

2

Tôi đã phải chia một danh sách để trích xuất tính năng thành hai phần lt, lc:

ltexts = ((df4.ix[0:,[3,7]]).values).tolist()
random.shuffle(ltexts)

featsets = [(act_features((lt)),lc) 
              for lc, lt in ltexts]

def act_features(atext):
  features = {}
  for word in nltk.word_tokenize(atext):
     features['cont({})'.format(word.lower())]=True
  return features
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.