Hướng dẫn length of each element in array python - độ dài của mỗi phần tử trong python mảng

Vấn đề:

Viết một vòng lặp đi qua:

['spam!', 1, ['Brie', 'Roquefort', 'Pol le Veq'], [1, 2, 3]]

và in chiều dài của mỗi phần tử.

Tôi đã thử làm giải pháp của mình:

list = ['spam!', 1,['Brie', 'Roquefort', 'Pol le Veq'], [1,2,3]]
element = 0

for i in list:
    print len(list[element])
    element += 1

Nhưng nó nhận được lỗi này: TypeError: object of type 'int' has no len()

Được hỏi ngày 29 tháng 9 năm 2013 lúc 15:46Sep 29, 2013 at 15:46

Hướng dẫn length of each element in array python - độ dài của mỗi phần tử trong python mảng

2

Như những người khác đã chỉ ra, số 1 (mục thứ hai của danh sách chính) không có độ dài xác định. Nhưng bạn vẫn có thể bắt được ngoại lệ và in ra một cái gì đó nếu một cái gì đó như thế này là trường hợp, ví dụ:

myList = ['spam!', 1,['Brie', 'Roquefort', 'Pol le Veq'], [1,2,3]]

for entry in myList:
    try:
        l = len(entry)
        print "Length of", entry, "is", l
    except:
        print "Element", entry, "has no defined length"

Đã trả lời ngày 29 tháng 9 năm 2013 lúc 15:56Sep 29, 2013 at 15:56

BRMBRMbrm

Phù hiệu vàng 3.5711 Huy hiệu bạc14 Huy hiệu đồng1 gold badge13 silver badges14 bronze badges

Trước hết, sử dụng biến phần tử đó làm chỉ mục để truy cập các mục danh sách của bạn là dự phòng. Khi viết một vòng lặp cho Python, bạn đang lặp đi lặp lại từng mục trong danh sách sao cho, trên lặp 1:

for item in [1, [1,2,3]]:
    # item = 1
    ...

Và trên lần lặp tiếp theo: cho mục trong [1, [1,2,3]]: # item = [1, 2, 3] ...

Vấn đề tiếp theo là bạn có một mục trong danh sách đó không có độ dài xác định. Tôi không biết bạn muốn làm gì với điều đó, nhưng một giải pháp khả thi là thế này, sẽ in chiều dài của mục (tính bằng chữ số) nếu mục là một số nguyên:

items = ['spam!', 1,['Brie', 'Roquefort', 'Pol le Veq'], [1,2,3]]

for item in items:
    if isinstance(item, int):
        print(len(str(item)))
    else:
        print(len(item))

Đã trả lời ngày 29 tháng 9 năm 2013 lúc 16:06Sep 29, 2013 at 16:06

matt_rmatt_rmatt_r

411 Huy hiệu bạc3 Huy hiệu đồng1 silver badge3 bronze badges

Tôi đã suy nghĩ về câu hỏi của bạn và tôi nghĩ rằng bạn có thể là người mới ở Python như tôi, đối với tôi, mọi thứ đã được giải quyết trong R. Giải pháp mà tôi tìm thấy là đặt tất cả các yếu tố trong danh sách ... thành một danh sách 'yếu tố' Vì vậy, mã cuối cùng có thể chạy trên tất cả các danh sách trong danh sách:

for k in range(len(items)):
    if type(items[k])!= list:
       items[k]=[items[k]]
items

[len(i) for i in items]
>>[1, 1, 3, 3]

Đã trả lời ngày 19 tháng 8 năm 2020 lúc 0:20Aug 19, 2020 at 0:20

Có thể sử dụng MAP và __ LEN __ để kiểm tra nó sẽ gây ra lỗi khi sử dụng Len (), ví dụ:

myList = ['spam!', 1,['Brie', 'Roquefort', 'Pol le Veq'], [1,2,3]]
myList_filter = list(filter(lambda x: hasattr(x, "__len__"), myList))
myList_len = list(map(len, myList_filter)) 
print(myList_len) # [5, 1, 3, 3]

error_type = [entry for entry in myList if entry not in myList_filter]
print("{0} has no defined length".format(error_type)) # [1] has no defined length

Đã trả lời ngày 11 tháng 9 năm 2020 lúc 5:39Sep 11, 2020 at 5:39

Giải pháp duy nhất có thể là thay đổi loại int thành

list = ['spam!', 1,['Brie', 'Roquefort', 'Pol le Veq'], [1,2,3]]
element = 0

for i in list:
    print len(list[element])
    element += 1
0 và ngược lại. Nếu nó chỉ là một bài tập, nó không phải là một vấn đề.

Đã trả lời ngày 29 tháng 9 năm 2013 lúc 17:48Sep 29, 2013 at 17:48

Hướng dẫn length of each element in array python - độ dài của mỗi phần tử trong python mảng

ovrwngtvityovrwngtvityovrwngtvity

4.1333 Huy hiệu vàng14 Huy hiệu bạc19 Huy hiệu đồng3 gold badges14 silver badges19 bronze badges

def listlen(lists1):

    """
    return length of each element in a list     
    """
    import numpy
    newlist = []
    for item in lists1:
        if type(item) in [list,str,numpy.ndarray]:
            newlist.append(len(item))
        else:
            newlist.append(len([item]))
    return newlist

# example usage -
listlen(["somestring", 5, [1,2,3]] )

[10, 1, 3]

Đã trả lời ngày 7 tháng 5 lúc 18:28May 7 at 18:28

1